serve-sim 0.1.13 → 0.1.14
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/bin/serve-sim-bin +0 -0
- package/dist/middleware.js +44 -9
- package/dist/serve-sim.js +52 -17
- package/package.json +4 -1
- package/src/middleware.ts +291 -0
package/dist/serve-sim.js
CHANGED
|
@@ -1,26 +1,61 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var sS=Object.defineProperty;var iS=(_)=>_;function CS(_,e){this[_]=iS.bind(null,e)}var Le=(_,e)=>{for(var t in e)sS(_,t,{get:e[t],enumerable:!0,configurable:!0,set:CS.bind(e,t)})};var z_=(_,e)=>()=>(_&&(e=_(_=0)),e);var j_="AXe is not installed. Install it from https://github.com/cameroncooke/AXe.";import{execFile as cS}from"child_process";import{promisify as BS}from"util";async function ES(_,e){let{stdout:t}=await TS(_,e,{timeout:fS,maxBuffer:8388608});return t.toString()}function pS(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function uS(_,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 vS(_){let e=pS(_),t=[],S=(i,s)=>{if(t.length>=Q_)return;let C=i.frame;if(!uS(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<Q_;r++)S(i.children[r],`${s}.${r}`)};for(let i=0;i<_.length&&t.length<Q_;i++)S(_[i],String(i));return{screen:{width:e.width,height:e.height},elements:t}}async function OS(_){let e=await ES("axe",["describe-ui","--udid",_]);return vS(JSON.parse(e))}function lS(_){return _?.code==="ENOENT"}function bS(_){return _?.errors?.includes(j_)??!1}function wS(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function dS(_){let e=[];try{let t=await OS(_);if(!wS(t))throw Error(`axe returned ${t.elements.length} elements in ${t.screen.width}x${t.screen.height} AX space`);return{...t,errors:e}}catch(t){let S=t;e.push(lS(t)?j_:S.stderr||S.message||String(t))}return{screen:{width:1,height:1},elements:[],errors:e}}function gS(_){return`data: ${JSON.stringify(_)}
|
|
3
3
|
|
|
4
|
-
`}function $_({udid:e}){let _=new Set,t=null,s=null,S=Se,i=!1,C=()=>{if(_.size===0||t)return;t=setTimeout(A,S)},A=async()=>{if(t=null,i||_.size===0){C();return}i=!0;try{let n=await n_(e),r=A_(n);if(r!==s){for(let o of _)o.write(r);S=Se}else S=Math.min(S*2,Ze);if(s=r,C_(n))S=Ye}finally{i=!1,C()}};return{addClient(n){if(_.add(n),s)n.write(s);return A(),()=>{if(_.delete(n),_.size===0&&t)clearTimeout(t),t=null}}}}function ie(){let e=new Map;return{get(_){let t=e.get(_);if(t)return t;let s=$_({udid:_});return e.set(_,s),s}}}var Je=3500,I=500,Se=500,Ze=2000,Ye=15000,e_;var re=ee(()=>{e_=Qe(je)});var Ae={};Pe(Ae,{simMiddleware:()=>b_,selectServeSimState:()=>T});import{readdirSync as y_,readFileSync as a_,existsSync as c_,unlinkSync as Ce}from"fs";import{execSync as R_,spawn as oe,exec as B_,execFile as f_}from"child_process";import{tmpdir as F_}from"os";import{join as X}from"path";function d_(e){return!E_.test(e)}function l_(e,_){if(D_.has(_))return Promise.resolve(!0);return new Promise((t)=>{f_("xcrun",["simctl","get_app_container",e,_,"app"],{timeout:2000},(s,S)=>{if(s)return t(!1);let i=S.trim();if(!i)return t(!1);for(let C of T_)if(c_(X(i,C)))return t(!0);t(!1)})})}function u_(){let e=Date.now();if(h.booted&&e-h.at<1500)return h.booted;try{let _=R_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(_),s=new Set;for(let S of Object.values(t.devices))for(let i of S)if(i.state==="Booted")s.add(i.udid);return h={at:e,booted:s},s}catch{return null}}function d(){let e;try{e=y_(ne).filter((s)=>s.startsWith("server-")&&s.endsWith(".json"))}catch{return[]}let _=u_(),t=[];for(let s of e){let S=X(ne,s);try{let i=JSON.parse(a_(S,"utf-8"));try{process.kill(i.pid,0)}catch{try{Ce(S)}catch{}continue}if(_&&!_.has(i.device)){try{process.kill(i.pid,"SIGTERM")}catch{}try{Ce(S)}catch{}continue}t.push(i)}catch{}}return t}function T(e,_){if(_)return e.find((t)=>t.device===_)??null;return e[0]??null}function v_(e){let _=e.indexOf("?");if(_===-1)return null;return new URLSearchParams(e.slice(_+1)).get("device")}function q(e,_,t){return`${`${e}${_}`}?device=${encodeURIComponent(t)}`}function g_(){if(!k)k=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBIMSx3LEY5LG04LGswLEQ5LE45LFA5LGgxLFYxLHQwLFU5LGYxLGcxLG0xLEk5LHoxPXt9LFcxPVtdLHg4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksbjA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBPMChYLEcpe2Zvcih2YXIgSiBpbiBHKVhbSl09R1tKXTtyZXR1cm4gWH1mdW5jdGlvbiBkMShYKXtYJiZYLnBhcmVudE5vZGUmJlgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChYKX1mdW5jdGlvbiBIMChYLEcsSil7dmFyIFkscSxaLF89e307Zm9yKFogaW4gRylaPT0ia2V5Ij9ZPUdbWl06Wj09InJlZiI/cT1HW1pdOl9bWl09R1taXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihfLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9IMS5jYWxsKGFyZ3VtZW50cywyKTpKKSx0eXBlb2YgWD09ImZ1bmN0aW9uIiYmWC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFogaW4gWC5kZWZhdWx0UHJvcHMpX1taXT09PXZvaWQgMCYmKF9bWl09WC5kZWZhdWx0UHJvcHNbWl0pO3JldHVybiBMMShYLF8sWSxxLG51bGwpfWZ1bmN0aW9uIEwxKFgsRyxKLFkscSl7dmFyIFo9e3R5cGU6WCxwcm9wczpHLGtleTpKLHJlZjpZLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpxPT1udWxsPysrRjk6cSxfX2k6LTEsX191OjB9O3JldHVybiBxPT1udWxsJiZ3LnZub2RlIT1udWxsJiZ3LnZub2RlKFopLFp9ZnVuY3Rpb24gbChYKXtyZXR1cm4gWC5jaGlsZHJlbn1mdW5jdGlvbiB0KFgsRyl7dGhpcy5wcm9wcz1YLHRoaXMuY29udGV4dD1HfWZ1bmN0aW9uIHgwKFgsRyl7aWYoRz09bnVsbClyZXR1cm4gWC5fXz94MChYLl9fLFguX19pKzEpOm51bGw7Zm9yKHZhciBKO0c8WC5fX2subGVuZ3RoO0crKylpZigoSj1YLl9fa1tHXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mIFgudHlwZT09ImZ1bmN0aW9uIj94MChYKTpudWxsfWZ1bmN0aW9uIHA4KFgpe2lmKFguX19QJiZYLl9fZCl7dmFyIEc9WC5fX3YsSj1HLl9fZSxZPVtdLHE9W10sWj1PMCh7fSxHKTtaLl9fdj1HLl9fdisxLHcudm5vZGUmJncudm5vZGUoWiksdTEoWC5fX1AsWixHLFguX19uLFguX19QLm5hbWVzcGFjZVVSSSwzMiZHLl9fdT9bSl06bnVsbCxZLEo9PW51bGw/eDAoRyk6SiwhISgzMiZHLl9fdSkscSksWi5fX3Y9Ry5fX3YsWi5fXy5fX2tbWi5fX2ldPVosVDkoWSxaLHEpLEcuX19lPUcuX189bnVsbCxaLl9fZSE9SiYmTTkoWil9fWZ1bmN0aW9uIE05KFgpe2lmKChYPVguX18pIT1udWxsJiZYLl9fYyE9bnVsbClyZXR1cm4gWC5fX2U9WC5fX2MuYmFzZT1udWxsLFguX19rLnNvbWUoZnVuY3Rpb24oRyl7aWYoRyE9bnVsbCYmRy5fX2UhPW51bGwpcmV0dXJuIFguX19lPVguX19jLmJhc2U9Ry5fX2V9KSxNOShYKX1mdW5jdGlvbiB4MShYKXsoIVguX19kJiYoWC5fX2Q9ITApJiZrMC5wdXNoKFgpJiYhSzEuX19yKyt8fEQ5IT13LmRlYm91bmNlUmVuZGVyaW5nKSYmKChEOT13LmRlYm91bmNlUmVuZGVyaW5nKXx8TjkpKEsxKX1mdW5jdGlvbiBLMSgpe3RyeXtmb3IodmFyIFgsRz0xO2swLmxlbmd0aDspazAubGVuZ3RoPkcmJmswLnNvcnQoUDkpLFg9azAuc2hpZnQoKSxHPWswLmxlbmd0aCxwOChYKX1maW5hbGx5e2swLmxlbmd0aD1LMS5fX3I9MH19ZnVuY3Rpb24gQTkoWCxHLEosWSxxLFosXywkLHosTCxCKXt2YXIgVixILE8sVSxQLEYsQSxJPVkmJlkuX19rfHxXMSxzPUcubGVuZ3RoO2Zvcih6PWY4KEosRyxJLHoscyksVj0wO1Y8cztWKyspKE89Si5fX2tbVl0pIT1udWxsJiYoSD1PLl9faSE9LTEmJklbTy5fX2ldfHx6MSxPLl9faT1WLEY9dTEoWCxPLEgscSxaLF8sJCx6LEwsQiksVT1PLl9fZSxPLnJlZiYmSC5yZWYhPU8ucmVmJiYoSC5yZWYmJmMxKEgucmVmLG51bGwsTyksQi5wdXNoKE8ucmVmLE8uX19jfHxVLE8pKSxQPT1udWxsJiZVIT1udWxsJiYoUD1VKSwoQT0hISg0Jk8uX191KSl8fEguX19rPT09Ty5fX2s/KHo9dzkoTyx6LFgsQSksQSYmSC5fX2UmJihILl9fZT1udWxsKSk6dHlwZW9mIE8udHlwZT09ImZ1bmN0aW9uIiYmRiE9PXZvaWQgMD96PUY6VSYmKHo9VS5uZXh0U2libGluZyksTy5fX3UmPS03KTtyZXR1cm4gSi5fX2U9UCx6fWZ1bmN0aW9uIGY4KFgsRyxKLFkscSl7dmFyIFosXywkLHosTCxCPUoubGVuZ3RoLFY9QixIPTA7Zm9yKFguX19rPUFycmF5KHEpLFo9MDtaPHE7WisrKShfPUdbWl0pIT1udWxsJiZ0eXBlb2YgXyE9ImJvb2xlYW4iJiZ0eXBlb2YgXyE9ImZ1bmN0aW9uIj8odHlwZW9mIF89PSJzdHJpbmcifHx0eXBlb2YgXz09Im51bWJlciJ8fHR5cGVvZiBfPT0iYmlnaW50Inx8Xy5jb25zdHJ1Y3Rvcj09U3RyaW5nP189WC5fX2tbWl09TDEobnVsbCxfLG51bGwsbnVsbCxudWxsKTpuMChfKT9fPVguX19rW1pdPUwxKGwse2NoaWxkcmVuOl99LG51bGwsbnVsbCxudWxsKTpfLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZfLl9fYj4wP189WC5fX2tbWl09TDEoXy50eXBlLF8ucHJvcHMsXy5rZXksXy5yZWY/Xy5yZWY6bnVsbCxfLl9fdik6WC5fX2tbWl09Xyx6PVorSCxfLl9fPVgsXy5fX2I9WC5fX2IrMSwkPW51bGwsKEw9Xy5fX2k9ZDgoXyxKLHosVikpIT0tMSYmKFYtLSwoJD1KW0xdKSYmKCQuX191fD0yKSksJD09bnVsbHx8JC5fX3Y9PW51bGw/KEw9PS0xJiYocT5CP0gtLTpxPEImJkgrKyksdHlwZW9mIF8udHlwZSE9ImZ1bmN0aW9uIiYmKF8uX191fD00KSk6TCE9eiYmKEw9PXotMT9ILS06TD09eisxP0grKzooTD56P0gtLTpIKyssXy5fX3V8PTQpKSk6WC5fX2tbWl09bnVsbDtpZihWKWZvcihaPTA7WjxCO1orKykoJD1KW1pdKSE9bnVsbCYmKDImJC5fX3UpPT0wJiYoJC5fX2U9PVkmJihZPXgwKCQpKSxFOSgkLCQpKTtyZXR1cm4gWX1mdW5jdGlvbiB3OShYLEcsSixZKXt2YXIgcSxaO2lmKHR5cGVvZiBYLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihxPVguX19rLFo9MDtxJiZaPHEubGVuZ3RoO1orKylxW1pdJiYocVtaXS5fXz1YLEc9dzkocVtaXSxHLEosWSkpO3JldHVybiBHfVguX19lIT1HJiYoWSYmKEcmJlgudHlwZSYmIUcucGFyZW50Tm9kZSYmKEc9eDAoWCkpLEouaW5zZXJ0QmVmb3JlKFguX19lLEd8fG51bGwpKSxHPVguX19lKTtkbyBHPUcmJkcubmV4dFNpYmxpbmc7d2hpbGUoRyE9bnVsbCYmRy5ub2RlVHlwZT09OCk7cmV0dXJuIEd9ZnVuY3Rpb24gQjAoWCxHKXtyZXR1cm4gRz1HfHxbXSxYPT1udWxsfHx0eXBlb2YgWD09ImJvb2xlYW4ifHwobjAoWCk/WC5zb21lKGZ1bmN0aW9uKEope0IwKEosRyl9KTpHLnB1c2goWCkpLEd9ZnVuY3Rpb24gZDgoWCxHLEosWSl7dmFyIHEsWixfLCQ9WC5rZXksej1YLnR5cGUsTD1HW0pdLEI9TCE9bnVsbCYmKDImTC5fX3UpPT0wO2lmKEw9PT1udWxsJiYkPT1udWxsfHxCJiYkPT1MLmtleSYmej09TC50eXBlKXJldHVybiBKO2lmKFk+KEI/MTowKSl7Zm9yKHE9Si0xLFo9SisxO3E+PTB8fFo8Ry5sZW5ndGg7KWlmKChMPUdbXz1xPj0wP3EtLTpaKytdKSE9bnVsbCYmKDImTC5fX3UpPT0wJiYkPT1MLmtleSYmej09TC50eXBlKXJldHVybiBffXJldHVybi0xfWZ1bmN0aW9uIE85KFgsRyxKKXtHWzBdPT0iLSI/WC5zZXRQcm9wZXJ0eShHLEo9PW51bGw/IiI6Sik6WFtHXT1KPT1udWxsPyIiOnR5cGVvZiBKIT0ibnVtYmVyInx8eDgudGVzdChHKT9KOkorInB4In1mdW5jdGlvbiAkMShYLEcsSixZLHEpe3ZhciBaLF87WDppZihHPT0ic3R5bGUiKWlmKHR5cGVvZiBKPT0ic3RyaW5nIilYLnN0eWxlLmNzc1RleHQ9SjtlbHNle2lmKHR5cGVvZiBZPT0ic3RyaW5nIiYmKFguc3R5bGUuY3NzVGV4dD1ZPSIiKSxZKWZvcihHIGluIFkpSiYmRyBpbiBKfHxPOShYLnN0eWxlLEcsIiIpO2lmKEopZm9yKEcgaW4gSilZJiZKW0ddPT1ZW0ddfHxPOShYLnN0eWxlLEcsSltHXSl9ZWxzZSBpZihHWzBdPT0ibyImJkdbMV09PSJuIilaPUchPShHPUcucmVwbGFjZShVOSwiJDEiKSksXz1HLnRvTG93ZXJDYXNlKCksRz1fIGluIFh8fEc9PSJvbkZvY3VzT3V0Inx8Rz09Im9uRm9jdXNJbiI/Xy5zbGljZSgyKTpHLnNsaWNlKDIpLFgubHx8KFgubD17fSksWC5sW0crWl09SixKP1k/Slt0MF09WVt0MF06KEpbdDBdPWYxLFguYWRkRXZlbnRMaXN0ZW5lcihHLFo/bTE6ZzEsWikpOlgucmVtb3ZlRXZlbnRMaXN0ZW5lcihHLFo/bTE6ZzEsWik7ZWxzZXtpZihxPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKUc9Ry5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihHIT0id2lkdGgiJiZHIT0iaGVpZ2h0IiYmRyE9ImhyZWYiJiZHIT0ibGlzdCImJkchPSJmb3JtIiYmRyE9InRhYkluZGV4IiYmRyE9ImRvd25sb2FkIiYmRyE9InJvd1NwYW4iJiZHIT0iY29sU3BhbiImJkchPSJyb2xlIiYmRyE9InBvcG92ZXIiJiZHIGluIFgpdHJ5e1hbR109Sj09bnVsbD8iIjpKO2JyZWFrIFh9Y2F0Y2goJCl7fXR5cGVvZiBKPT0iZnVuY3Rpb24ifHwoSj09bnVsbHx8Sj09PSExJiZHWzRdIT0iLSI/WC5yZW1vdmVBdHRyaWJ1dGUoRyk6WC5zZXRBdHRyaWJ1dGUoRyxHPT0icG9wb3ZlciImJko9PTE/IiI6SikpfX1mdW5jdGlvbiBCOShYKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYodGhpcy5sKXt2YXIgSj10aGlzLmxbRy50eXBlK1hdO2lmKEdbVjFdPT1udWxsKUdbVjFdPWYxKys7ZWxzZSBpZihHW1YxXTxKW3QwXSlyZXR1cm47cmV0dXJuIEoody5ldmVudD93LmV2ZW50KEcpOkcpfX19ZnVuY3Rpb24gdTEoWCxHLEosWSxxLFosXywkLHosTCl7dmFyIEIsVixILE8sVSxQLEYsQSxJLHMsaCxjLGUsbixfMCxmPUcudHlwZTtpZihHLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKHo9ISEoMzImSi5fX3UpLFo9WyQ9Ry5fX2U9Si5fX2VdKSwoQj13Ll9fYikmJkIoRyk7WDppZih0eXBlb2YgZj09ImZ1bmN0aW9uIil0cnl7aWYoQT1HLnByb3BzLEk9Zi5wcm90b3R5cGUmJmYucHJvdG90eXBlLnJlbmRlcixzPShCPWYuY29udGV4dFR5cGUpJiZZW0IuX19jXSxoPUI/cz9zLnByb3BzLnZhbHVlOkIuX186WSxKLl9fYz9GPShWPUcuX19jPUouX19jKS5fXz1WLl9fRTooST9HLl9fYz1WPW5ldyBmKEEsaCk6KEcuX19jPVY9bmV3IHQoQSxoKSxWLmNvbnN0cnVjdG9yPWYsVi5yZW5kZXI9YzgpLHMmJnMuc3ViKFYpLFYuc3RhdGV8fChWLnN0YXRlPXt9KSxWLl9fbj1ZLEg9Vi5fX2Q9ITAsVi5fX2g9W10sVi5fc2I9W10pLEkmJlYuX19zPT1udWxsJiYoVi5fX3M9Vi5zdGF0ZSksSSYmZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihWLl9fcz09Vi5zdGF0ZSYmKFYuX19zPU8wKHt9LFYuX19zKSksTzAoVi5fX3MsZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoQSxWLl9fcykpKSxPPVYucHJvcHMsVT1WLnN0YXRlLFYuX192PUcsSClJJiZmLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50KCksSSYmVi5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmVi5fX2gucHVzaChWLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKEkmJmYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZBIT09TyYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoQSxoKSxHLl9fdj09Si5fX3Z8fCFWLl9fZSYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlKEEsVi5fX3MsaCk9PT0hMSl7Ry5fX3YhPUouX192JiYoVi5wcm9wcz1BLFYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEpLEcuX19lPUouX19lLEcuX19rPUouX19rLEcuX19rLnNvbWUoZnVuY3Rpb24oeSl7eSYmKHkuX189Ryl9KSxXMS5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXSxWLl9faC5sZW5ndGgmJl8ucHVzaChWKTticmVhayBYfVYuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmVi5jb21wb25lbnRXaWxsVXBkYXRlKEEsVi5fX3MsaCksSSYmVi5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJlYuX19oLnB1c2goZnVuY3Rpb24oKXtWLmNvbXBvbmVudERpZFVwZGF0ZShPLFUsUCl9KX1pZihWLmNvbnRleHQ9aCxWLnByb3BzPUEsVi5fX1A9WCxWLl9fZT0hMSxjPXcuX19yLGU9MCxJKVYuc3RhdGU9Vi5fX3MsVi5fX2Q9ITEsYyYmYyhHKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLFcxLnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdO2Vsc2UgZG8gVi5fX2Q9ITEsYyYmYyhHKSxCPVYucmVuZGVyKFYucHJvcHMsVi5zdGF0ZSxWLmNvbnRleHQpLFYuc3RhdGU9Vi5fX3M7d2hpbGUoVi5fX2QmJisrZTwyNSk7Vi5zdGF0ZT1WLl9fcyxWLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFk9TzAoTzAoe30sWSksVi5nZXRDaGlsZENvbnRleHQoKSkpLEkmJiFIJiZWLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoUD1WLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKE8sVSkpLG49QiE9bnVsbCYmQi50eXBlPT09bCYmQi5rZXk9PW51bGw/azkoQi5wcm9wcy5jaGlsZHJlbik6QiwkPUE5KFgsbjAobik/bjpbbl0sRyxKLFkscSxaLF8sJCx6LEwpLFYuYmFzZT1HLl9fZSxHLl9fdSY9LTE2MSxWLl9faC5sZW5ndGgmJl8ucHVzaChWKSxGJiYoVi5fX0U9Vi5fXz1udWxsKX1jYXRjaCh5KXtpZihHLl9fdj1udWxsLHp8fFohPW51bGwpaWYoeS50aGVuKXtmb3IoRy5fX3V8PXo/MTYwOjEyODskJiYkLm5vZGVUeXBlPT04JiYkLm5leHRTaWJsaW5nOykkPSQubmV4dFNpYmxpbmc7WltaLmluZGV4T2YoJCldPW51bGwsRy5fX2U9JH1lbHNle2ZvcihfMD1aLmxlbmd0aDtfMC0tOylkMShaW18wXSk7cDEoRyl9ZWxzZSBHLl9fZT1KLl9fZSxHLl9faz1KLl9fayx5LnRoZW58fHAxKEcpO3cuX19lKHksRyxKKX1lbHNlIFo9PW51bGwmJkcuX192PT1KLl9fdj8oRy5fX2s9Si5fX2ssRy5fX2U9Si5fX2UpOiQ9Ry5fX2U9dTgoSi5fX2UsRyxKLFkscSxaLF8seixMKTtyZXR1cm4oQj13LmRpZmZlZCkmJkIoRyksMTI4JkcuX191P3ZvaWQgMDokfWZ1bmN0aW9uIHAxKFgpe1gmJihYLl9fYyYmKFguX19jLl9fZT0hMCksWC5fX2smJlguX19rLnNvbWUocDEpKX1mdW5jdGlvbiBUOShYLEcsSil7Zm9yKHZhciBZPTA7WTxKLmxlbmd0aDtZKyspYzEoSltZXSxKWysrWV0sSlsrK1ldKTt3Ll9fYyYmdy5fX2MoRyxYKSxYLnNvbWUoZnVuY3Rpb24ocSl7dHJ5e1g9cS5fX2gscS5fX2g9W10sWC5zb21lKGZ1bmN0aW9uKFope1ouY2FsbChxKX0pfWNhdGNoKFope3cuX19lKFoscS5fX3YpfX0pfWZ1bmN0aW9uIGs5KFgpe3JldHVybiB0eXBlb2YgWCE9Im9iamVjdCJ8fFg9PW51bGx8fFguX19iPjA/WDpuMChYKT9YLm1hcChrOSk6TzAoe30sWCl9ZnVuY3Rpb24gdTgoWCxHLEosWSxxLFosXywkLHope3ZhciBMLEIsVixILE8sVSxQLEY9Si5wcm9wc3x8ejEsQT1HLnByb3BzLEk9Ry50eXBlO2lmKEk9PSJzdmciP3E9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpJPT0ibWF0aCI/cT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6cXx8KHE9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxaIT1udWxsKXtmb3IoTD0wO0w8Wi5sZW5ndGg7TCsrKWlmKChPPVpbTF0pJiYic2V0QXR0cmlidXRlImluIE89PSEhSSYmKEk/Ty5sb2NhbE5hbWU9PUk6Ty5ub2RlVHlwZT09Mykpe1g9TyxaW0xdPW51bGw7YnJlYWt9fWlmKFg9PW51bGwpe2lmKEk9PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEEpO1g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHEsSSxBLmlzJiZBKSwkJiYody5fX20mJncuX19tKEcsWiksJD0hMSksWj1udWxsfWlmKEk9PW51bGwpRj09PUF8fCQmJlguZGF0YT09QXx8KFguZGF0YT1BKTtlbHNle2lmKFo9WiYmSDEuY2FsbChYLmNoaWxkTm9kZXMpLCEkJiZaIT1udWxsKWZvcihGPXt9LEw9MDtMPFguYXR0cmlidXRlcy5sZW5ndGg7TCsrKUZbKE89WC5hdHRyaWJ1dGVzW0xdKS5uYW1lXT1PLnZhbHVlO2ZvcihMIGluIEYpTz1GW0xdLEw9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Vj1POkw9PSJjaGlsZHJlbiJ8fChMIGluIEEpfHxMPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBBKXx8TD09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIEEpfHwkMShYLEwsbnVsbCxPLHEpO2ZvcihMIGluIEEpTz1BW0xdLEw9PSJjaGlsZHJlbiI/SD1POkw9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Qj1POkw9PSJ2YWx1ZSI/VT1POkw9PSJjaGVja2VkIj9QPU86JCYmdHlwZW9mIE8hPSJmdW5jdGlvbiJ8fEZbTF09PT1PfHwkMShYLEwsTyxGW0xdLHEpO2lmKEIpJHx8ViYmKEIuX19odG1sPT1WLl9faHRtbHx8Qi5fX2h0bWw9PVguaW5uZXJIVE1MKXx8KFguaW5uZXJIVE1MPUIuX19odG1sKSxHLl9faz1bXTtlbHNlIGlmKFYmJihYLmlubmVySFRNTD0iIiksQTkoRy50eXBlPT0idGVtcGxhdGUiP1guY29udGVudDpYLG4wKEgpP0g6W0hdLEcsSixZLEk9PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6cSxaLF8sWj9aWzBdOkouX19rJiZ4MChKLDApLCQseiksWiE9bnVsbClmb3IoTD1aLmxlbmd0aDtMLS07KWQxKFpbTF0pOyR8fChMPSJ2YWx1ZSIsST09InByb2dyZXNzIiYmVT09bnVsbD9YLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpVIT1udWxsJiYoVSE9PVhbTF18fEk9PSJwcm9ncmVzcyImJiFVfHxJPT0ib3B0aW9uIiYmVSE9RltMXSkmJiQxKFgsTCxVLEZbTF0scSksTD0iY2hlY2tlZCIsUCE9bnVsbCYmUCE9WFtMXSYmJDEoWCxMLFAsRltMXSxxKSl9cmV0dXJuIFh9ZnVuY3Rpb24gYzEoWCxHLEope3RyeXtpZih0eXBlb2YgWD09ImZ1bmN0aW9uIil7dmFyIFk9dHlwZW9mIFguX191PT0iZnVuY3Rpb24iO1kmJlguX191KCksWSYmRz09bnVsbHx8KFguX191PVgoRykpfWVsc2UgWC5jdXJyZW50PUd9Y2F0Y2gocSl7dy5fX2UocSxKKX19ZnVuY3Rpb24gRTkoWCxHLEope3ZhciBZLHE7aWYody51bm1vdW50JiZ3LnVubW91bnQoWCksKFk9WC5yZWYpJiYoWS5jdXJyZW50JiZZLmN1cnJlbnQhPVguX19lfHxjMShZLG51bGwsRykpLChZPVguX19jKSE9bnVsbCl7aWYoWS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7WS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFope3cuX19lKFosRyl9WS5iYXNlPVkuX19QPW51bGx9aWYoWT1YLl9faylmb3IocT0wO3E8WS5sZW5ndGg7cSsrKVlbcV0mJkU5KFlbcV0sRyxKfHx0eXBlb2YgWC50eXBlIT0iZnVuY3Rpb24iKTtKfHxkMShYLl9fZSksWC5fX2M9WC5fXz1YLl9fZT12b2lkIDB9ZnVuY3Rpb24gYzgoWCxHLEope3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKFgsSil9ZnVuY3Rpb24gRDEoWCxHLEope3ZhciBZLHEsWixfO0c9PWRvY3VtZW50JiYoRz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHcuX18mJncuX18oWCxHKSxxPShZPXR5cGVvZiBKPT0iZnVuY3Rpb24iKT9udWxsOkomJkouX19rfHxHLl9fayxaPVtdLF89W10sdTEoRyxYPSghWSYmSnx8RykuX19rPUgwKGwsbnVsbCxbWF0pLHF8fHoxLHoxLEcubmFtZXNwYWNlVVJJLCFZJiZKP1tKXTpxP251bGw6Ry5maXJzdENoaWxkP0gxLmNhbGwoRy5jaGlsZE5vZGVzKTpudWxsLFosIVkmJko/SjpxP3EuX19lOkcuZmlyc3RDaGlsZCxZLF8pLFQ5KFosWCxfKX1mdW5jdGlvbiBGMChYKXtmdW5jdGlvbiBHKEope3ZhciBZLHE7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwoWT1uZXcgU2V0LChxPXt9KVtHLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBxfSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihaKXt0aGlzLnByb3BzLnZhbHVlIT1aLnZhbHVlJiZZLmZvckVhY2goZnVuY3Rpb24oXyl7Xy5fX2U9ITAseDEoXyl9KX0sdGhpcy5zdWI9ZnVuY3Rpb24oWil7WS5hZGQoWik7dmFyIF89Wi5jb21wb25lbnRXaWxsVW5tb3VudDtaLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WSYmWS5kZWxldGUoWiksXyYmXy5jYWxsKFopfX0pLEouY2hpbGRyZW59cmV0dXJuIEcuX19jPSJfX2NDIitJOSsrLEcuX189WCxHLlByb3ZpZGVyPUcuX19sPShHLkNvbnN1bWVyPWZ1bmN0aW9uKEosWSl7cmV0dXJuIEouY2hpbGRyZW4oWSl9KS5jb250ZXh0VHlwZT1HLEd9SDE9VzEuc2xpY2Usdz17X19lOmZ1bmN0aW9uKFgsRyxKLFkpe2Zvcih2YXIgcSxaLF87Rz1HLl9fOylpZigocT1HLl9fYykmJiFxLl9fKXRyeXtpZigoWj1xLmNvbnN0cnVjdG9yKSYmWi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPW51bGwmJihxLnNldFN0YXRlKFouZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKFgpKSxfPXEuX19kKSxxLmNvbXBvbmVudERpZENhdGNoIT1udWxsJiYocS5jb21wb25lbnREaWRDYXRjaChYLFl8fHt9KSxfPXEuX19kKSxfKXJldHVybiBxLl9fRT1xfWNhdGNoKCQpe1g9JH10aHJvdyBYfX0sRjk9MCxtOD1mdW5jdGlvbihYKXtyZXR1cm4gWCE9bnVsbCYmWC5jb25zdHJ1Y3Rvcj09PXZvaWQgMH0sdC5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oWCxHKXt2YXIgSjtKPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1PMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgWD09ImZ1bmN0aW9uIiYmKFg9WChPMCh7fSxKKSx0aGlzLnByb3BzKSksWCYmTzAoSixYKSxYIT1udWxsJiZ0aGlzLl9fdiYmKEcmJnRoaXMuX3NiLnB1c2goRykseDEodGhpcykpfSx0LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihYKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLFgmJnRoaXMuX19oLnB1c2goWCkseDEodGhpcykpfSx0LnByb3RvdHlwZS5yZW5kZXI9bCxrMD1bXSxOOT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsUDk9ZnVuY3Rpb24oWCxHKXtyZXR1cm4gWC5fX3YuX19iLUcuX192Ll9fYn0sSzEuX19yPTAsaDE9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxWMT0iX19kIitoMSx0MD0iX19hIitoMSxVOT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxmMT0wLGcxPUI5KCExKSxtMT1COSghMCksSTk9MDt2YXIgcDAseCxsMSxDOSxlMD0wLGc5PVtdLGE9dyxSOT1hLl9fYixiOT1hLl9fcixqOT1hLmRpZmZlZCxTOT1hLl9fYyx2OT1hLnVubW91bnQseTk9YS5fXztmdW5jdGlvbiBCMShYLEcpe2EuX19oJiZhLl9faCh4LFgsZTB8fEcpLGUwPTA7dmFyIEo9eC5fX0h8fCh4Ll9fSD17X186W10sX19oOltdfSk7cmV0dXJuIFg+PUouX18ubGVuZ3RoJiZKLl9fLnB1c2goe30pLEouX19bWF19ZnVuY3Rpb24gayhYKXtyZXR1cm4gZTA9MSxpMSh4OSxYKX1mdW5jdGlvbiBpMShYLEcsSil7dmFyIFk9QjEocDArKywyKTtpZihZLnQ9WCwhWS5fX2MmJihZLl9fPVtKP0ooRyk6eDkodm9pZCAwLEcpLGZ1bmN0aW9uKCQpe3ZhciB6PVkuX19OP1kuX19OWzBdOlkuX19bMF0sTD1ZLnQoeiwkKTt6IT09TCYmKFkuX19OPVtMLFkuX19bMV1dLFkuX19jLnNldFN0YXRlKHt9KSl9XSxZLl9fYz14LCF4Ll9fZikpe3ZhciBxPWZ1bmN0aW9uKCQseixMKXtpZighWS5fX2MuX19IKXJldHVybiEwO3ZhciBCPVkuX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuIEguX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihIKXtyZXR1cm4hSC5fX059KSlyZXR1cm4hWnx8Wi5jYWxsKHRoaXMsJCx6LEwpO3ZhciBWPVkuX19jLnByb3BzIT09JDtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEgpe2lmKEguX19OKXt2YXIgTz1ILl9fWzBdO0guX189SC5fX04sSC5fX049dm9pZCAwLE8hPT1ILl9fWzBdJiYoVj0hMCl9fSksWiYmWi5jYWxsKHRoaXMsJCx6LEwpfHxWfTt4Ll9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlosY29tcG9uZW50V2lsbFVwZGF0ZTpffT14O3guY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbigkLHosTCl7aWYodGhpcy5fX2Upe3ZhciBCPVo7Wj12b2lkIDAscSgkLHosTCksWj1CfV8mJl8uY2FsbCh0aGlzLCQseixMKX0seC5zaG91bGRDb21wb25lbnRVcGRhdGU9cX1yZXR1cm4gWS5fX058fFkuX199ZnVuY3Rpb24gaihYLEcpe3ZhciBKPUIxKHAwKyssMyk7IWEuX19zJiZtOShKLl9fSCxHKSYmKEouX189WCxKLnU9Ryx4Ll9fSC5fX2gucHVzaChKKSl9ZnVuY3Rpb24gYihYKXtyZXR1cm4gZTA9NSx5MChmdW5jdGlvbigpe3JldHVybntjdXJyZW50Olh9fSxbXSl9ZnVuY3Rpb24geTAoWCxHKXt2YXIgSj1CMShwMCsrLDcpO3JldHVybiBtOShKLl9fSCxHKSYmKEouX189WCgpLEouX19IPUcsSi5fX2g9WCksSi5fX31mdW5jdGlvbiBSKFgsRyl7cmV0dXJuIGUwPTgseTAoZnVuY3Rpb24oKXtyZXR1cm4gWH0sRyl9ZnVuY3Rpb24gRTAoWCl7dmFyIEc9eC5jb250ZXh0W1guX19jXSxKPUIxKHAwKyssOSk7cmV0dXJuIEouYz1YLEc/KEouX189PW51bGwmJihKLl9fPSEwLEcuc3ViKHgpKSxHLnByb3BzLnZhbHVlKTpYLl9ffWZ1bmN0aW9uIGw4KCl7Zm9yKHZhciBYO1g9Zzkuc2hpZnQoKTspe3ZhciBHPVguX19IO2lmKFguX19QJiZHKXRyeXtHLl9faC5zb21lKE8xKSxHLl9faC5zb21lKGExKSxHLl9faD1bXX1jYXRjaChKKXtHLl9faD1bXSxhLl9fZShKLFguX192KX19fWEuX19iPWZ1bmN0aW9uKFgpe3g9bnVsbCxSOSYmUjkoWCl9LGEuX189ZnVuY3Rpb24oWCxHKXtYJiZHLl9fayYmRy5fX2suX19tJiYoWC5fX209Ry5fX2suX19tKSx5OSYmeTkoWCxHKX0sYS5fX3I9ZnVuY3Rpb24oWCl7YjkmJmI5KFgpLHAwPTA7dmFyIEc9KHg9WC5fX2MpLl9fSDtHJiYobDE9PT14PyhHLl9faD1bXSx4Ll9faD1bXSxHLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihHLl9faC5zb21lKE8xKSxHLl9faC5zb21lKGExKSxHLl9faD1bXSxwMD0wKSksbDE9eH0sYS5kaWZmZWQ9ZnVuY3Rpb24oWCl7ajkmJmo5KFgpO3ZhciBHPVguX19jO0cmJkcuX19IJiYoRy5fX0guX19oLmxlbmd0aCYmKGc5LnB1c2goRykhPT0xJiZDOT09PWEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKEM5PWEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8YTgpKGw4KSksRy5fX0guX18uc29tZShmdW5jdGlvbihKKXtKLnUmJihKLl9fSD1KLnUpLEoudT12b2lkIDB9KSksbDE9eD1udWxsfSxhLl9fYz1mdW5jdGlvbihYLEcpe0cuc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZShPMSksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiFZLl9ffHxhMShZKX0pfWNhdGNoKFkpe0cuc29tZShmdW5jdGlvbihxKXtxLl9faCYmKHEuX19oPVtdKX0pLEc9W10sYS5fX2UoWSxKLl9fdil9fSksUzkmJlM5KFgsRyl9LGEudW5tb3VudD1mdW5jdGlvbihYKXt2OSYmdjkoWCk7dmFyIEcsSj1YLl9fYztKJiZKLl9fSCYmKEouX19ILl9fLnNvbWUoZnVuY3Rpb24oWSl7dHJ5e08xKFkpfWNhdGNoKHEpe0c9cX19KSxKLl9fSD12b2lkIDAsRyYmYS5fX2UoRyxKLl9fdikpfTt2YXIgaDk9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBhOChYKXt2YXIgRyxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFkpLGg5JiZjYW5jZWxBbmltYXRpb25GcmFtZShHKSxzZXRUaW1lb3V0KFgpfSxZPXNldFRpbWVvdXQoSiwzNSk7aDkmJihHPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24gTzEoWCl7dmFyIEc9eCxKPVguX19jO3R5cGVvZiBKPT0iZnVuY3Rpb24iJiYoWC5fX2M9dm9pZCAwLEooKSkseD1HfWZ1bmN0aW9uIGExKFgpe3ZhciBHPXg7WC5fX2M9WC5fXygpLHg9R31mdW5jdGlvbiBtOShYLEcpe3JldHVybiFYfHxYLmxlbmd0aCE9PUcubGVuZ3RofHxHLnNvbWUoZnVuY3Rpb24oSixZKXtyZXR1cm4gSiE9PVhbWV19KX1mdW5jdGlvbiB4OShYLEcpe3JldHVybiB0eXBlb2YgRz09ImZ1bmN0aW9uIj9HKFgpOkd9ZnVuY3Rpb24gZTgoWCxHKXtmb3IodmFyIEogaW4gRylYW0pdPUdbSl07cmV0dXJuIFh9ZnVuY3Rpb24gcDkoWCxHKXtmb3IodmFyIEogaW4gWClpZihKIT09Il9fc291cmNlIiYmIShKIGluIEcpKXJldHVybiEwO2Zvcih2YXIgWSBpbiBHKWlmKFkhPT0iX19zb3VyY2UiJiZYW1ldIT09R1tZXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmOShYLEcpe3RoaXMucHJvcHM9WCx0aGlzLmNvbnRleHQ9R30oZjkucHJvdG90eXBlPW5ldyB0KS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxmOS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFgsRyl7cmV0dXJuIHA5KHRoaXMucHJvcHMsWCl8fHA5KHRoaXMuc3RhdGUsRyl9O3ZhciBkOT13Ll9fYjt3Ll9fYj1mdW5jdGlvbihYKXtYLnR5cGUmJlgudHlwZS5fX2YmJlgucmVmJiYoWC5wcm9wcy5yZWY9WC5yZWYsWC5yZWY9bnVsbCksZDkmJmQ5KFgpfTt2YXIgWDQ9dy5fX2U7dy5fX2U9ZnVuY3Rpb24oWCxHLEosWSl7aWYoWC50aGVuKXtmb3IodmFyIHEsWj1HO1o9Wi5fXzspaWYoKHE9Wi5fX2MpJiZxLl9fYylyZXR1cm4gRy5fX2U9PW51bGwmJihHLl9fZT1KLl9fZSxHLl9faz1KLl9faykscS5fX2MoWCxHKX1YNChYLEcsSixZKX07dmFyIHU5PXcudW5tb3VudDtmdW5jdGlvbiByOShYLEcsSil7cmV0dXJuIFgmJihYLl9fYyYmWC5fX2MuX19IJiYoWC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWSl7dHlwZW9mIFkuX19jPT0iZnVuY3Rpb24iJiZZLl9fYygpfSksWC5fX2MuX19IPW51bGwpLChYPWU4KHt9LFgpKS5fX2MhPW51bGwmJihYLl9fYy5fX1A9PT1KJiYoWC5fX2MuX19QPUcpLFguX19jLl9fZT0hMCxYLl9fYz1udWxsKSxYLl9faz1YLl9fayYmWC5fX2subWFwKGZ1bmN0aW9uKFkpe3JldHVybiByOShZLEcsSil9KSksWH1mdW5jdGlvbiBzOShYLEcsSil7cmV0dXJuIFgmJkomJihYLl9fdj1udWxsLFguX19rPVguX19rJiZYLl9fay5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuIHM5KFksRyxKKX0pLFguX19jJiZYLl9fYy5fX1A9PT1HJiYoWC5fX2UmJkouYXBwZW5kQ2hpbGQoWC5fX2UpLFguX19jLl9fZT0hMCxYLl9fYy5fX1A9SikpLFh9ZnVuY3Rpb24gbzEoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gdDkoWCl7dmFyIEc9WC5fXyYmWC5fXy5fX2M7cmV0dXJuIEcmJkcuX19hJiZHLl9fYShYKX1mdW5jdGlvbiBGMSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXcudW5tb3VudD1mdW5jdGlvbihYKXt2YXIgRz1YLl9fYztHJiYoRy5fX3o9ITApLEcmJkcuX19SJiZHLl9fUigpLEcmJjMyJlguX191JiYoWC50eXBlPW51bGwpLHU5JiZ1OShYKX0sKG8xLnByb3RvdHlwZT1uZXcgdCkuX19jPWZ1bmN0aW9uKFgsRyl7dmFyIEo9Ry5fX2MsWT10aGlzO1kubz09bnVsbCYmKFkubz1bXSksWS5vLnB1c2goSik7dmFyIHE9dDkoWS5fX3YpLFo9ITEsXz1mdW5jdGlvbigpe1p8fFkuX196fHwoWj0hMCxKLl9fUj1udWxsLHE/cSh6KTp6KCkpfTtKLl9fUj1fO3ZhciAkPUouX19QO0ouX19QPW51bGw7dmFyIHo9ZnVuY3Rpb24oKXtpZighLS1ZLl9fdSl7aWYoWS5zdGF0ZS5fX2Epe3ZhciBMPVkuc3RhdGUuX19hO1kuX192Ll9fa1swXT1zOShMLEwuX19jLl9fUCxMLl9fYy5fX08pfXZhciBCO2ZvcihZLnNldFN0YXRlKHtfX2E6WS5fX2I9bnVsbH0pO0I9WS5vLnBvcCgpOylCLl9fUD0kLEIuZm9yY2VVcGRhdGUoKX19O1kuX191Kyt8fDMyJkcuX191fHxZLnNldFN0YXRlKHtfX2E6WS5fX2I9WS5fX3YuX19rWzBdfSksWC50aGVuKF8sXyl9LG8xLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sbzEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihYLEcpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFk9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09cjkodGhpcy5fX2IsSixZLl9fTz1ZLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgcT1HLl9fYSYmSDAobCxudWxsLFguZmFsbGJhY2spO3JldHVybiBxJiYocS5fX3UmPS0zMyksW0gwKGwsbnVsbCxHLl9fYT9udWxsOlguY2hpbGRyZW4pLHFdfTt2YXIgYzk9ZnVuY3Rpb24oWCxHLEope2lmKCsrSlsxXT09PUpbMF0mJlgubC5kZWxldGUoRyksWC5wcm9wcy5yZXZlYWxPcmRlciYmKFgucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCFYLmwuc2l6ZSkpZm9yKEo9WC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7WC5pPUo9SlsyXX19OyhGMS5wcm90b3R5cGU9bmV3IHQpLl9fYT1mdW5jdGlvbihYKXt2YXIgRz10aGlzLEo9dDkoRy5fX3YpLFk9Ry5sLmdldChYKTtyZXR1cm4gWVswXSsrLGZ1bmN0aW9uKHEpe3ZhciBaPWZ1bmN0aW9uKCl7Ry5wcm9wcy5yZXZlYWxPcmRlcj8oWS5wdXNoKHEpLGM5KEcsWCxZKSk6cSgpfTtKP0ooWik6WigpfX0sRjEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihYKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgRz1CMChYLmNoaWxkcmVuKTtYLnJldmVhbE9yZGVyJiZYLnJldmVhbE9yZGVyWzBdPT09ImIiJiZHLnJldmVyc2UoKTtmb3IodmFyIEo9Ry5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KEdbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIFguY2hpbGRyZW59LEYxLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9RjEucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIFg9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihHLEope2M5KFgsSixHKX0pfTt2YXIgRzQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsSjQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFk0PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWjQ9L1tBLVowLTldL2cscTQ9dHlwZW9mIGRvY3VtZW50PCJ1IixRND1mdW5jdGlvbihYKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoWCl9O2Z1bmN0aW9uIG45KFgsRyxKKXtyZXR1cm4gRy5fX2s9PW51bGwmJihHLnRleHRDb250ZW50PSIiKSxEMShYLEcpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksWD9YLl9fYzpudWxsfXQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oWCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFgse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrWF19LHNldDpmdW5jdGlvbihHKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxYLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6R30pfX0pfSk7dmFyIGw5PXcuZXZlbnQ7dy5ldmVudD1mdW5jdGlvbihYKXtyZXR1cm4gbDkmJihYPWw5KFgpKSxYLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LFguaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LFguaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sWC5uYXRpdmVFdmVudD1YfTt2YXIgZTksXzQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LGE5PXcudm5vZGU7dy52bm9kZT1mdW5jdGlvbihYKXt0eXBlb2YgWC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oRyl7dmFye3Byb3BzOkosdHlwZTpZfT1HLHE9e30sWj1ZLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBfIGluIEope3ZhciAkPUpbX107aWYoIShfPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJiQ9PW51bGx8fHE0JiZfPT09ImNoaWxkcmVuIiYmWT09PSJub3NjcmlwdCJ8fF89PT0iY2xhc3MifHxfPT09ImNsYXNzTmFtZSIpKXt2YXIgej1fLnRvTG93ZXJDYXNlKCk7Xz09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9fPSJ2YWx1ZSI6Xz09PSJkb3dubG9hZCImJiQ9PT0hMD8kPSIiOno9PT0idHJhbnNsYXRlIiYmJD09PSJubyI/JD0hMTp6WzBdPT09Im8iJiZ6WzFdPT09Im4iP3o9PT0ib25kb3VibGVjbGljayI/Xz0ib25kYmxjbGljayI6eiE9PSJvbmNoYW5nZSJ8fFkhPT0iaW5wdXQiJiZZIT09InRleHRhcmVhInx8UTQoSi50eXBlKT96PT09Im9uZm9jdXMiP189Im9uZm9jdXNpbiI6ej09PSJvbmJsdXIiP189Im9uZm9jdXNvdXQiOlk0LnRlc3QoXykmJihfPXopOno9Xz0ib25pbnB1dCI6WiYmSjQudGVzdChfKT9fPV8ucmVwbGFjZShaNCwiLSQmIikudG9Mb3dlckNhc2UoKTokPT09bnVsbCYmKCQ9dm9pZCAwKSx6PT09Im9uaW5wdXQiJiZxW189el0mJihfPSJvbmlucHV0Q2FwdHVyZSIpLHFbX109JH19WT09InNlbGVjdCImJihxLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHEudmFsdWUpJiYocS52YWx1ZT1CMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe0wucHJvcHMuc2VsZWN0ZWQ9cS52YWx1ZS5pbmRleE9mKEwucHJvcHMudmFsdWUpIT0tMX0pKSxxLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKHEudmFsdWU9QjAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihMKXtMLnByb3BzLnNlbGVjdGVkPXEubXVsdGlwbGU/cS5kZWZhdWx0VmFsdWUuaW5kZXhPZihMLnByb3BzLnZhbHVlKSE9LTE6cS5kZWZhdWx0VmFsdWU9PUwucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8ocS5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjbGFzc05hbWUiLF80KSk6Si5jbGFzc05hbWUmJihxLmNsYXNzPXEuY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxHLnByb3BzPXF9KFgpLFguJCR0eXBlb2Y9RzQsYTkmJmE5KFgpfTt2YXIgaTk9dy5fX3I7dy5fX3I9ZnVuY3Rpb24oWCl7aTkmJmk5KFgpLGU5PVguX19jfTt2YXIgbzk9dy5kaWZmZWQ7dy5kaWZmZWQ9ZnVuY3Rpb24oWCl7bzkmJm85KFgpO3Zhcntwcm9wczpHLF9fZTpKfT1YO0ohPW51bGwmJlgudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBHJiZHLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Ry52YWx1ZT09bnVsbD8iIjpHLnZhbHVlKSxlOT1udWxsfTtmdW5jdGlvbiBYOChYKXtyZXR1cm4hIVguX19rJiYoRDEobnVsbCxYKSwhMCl9ZnVuY3Rpb24gRzgoWCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihHKXtuOShHLFgpfSx1bm1vdW50OmZ1bmN0aW9uKCl7WDgoWCl9fX12YXIgSjg9Imh0dHBzOi8vZ2l0aHViLmNvbS9jYW1lcm9uY29va2UvQVhlIixZOD0iQVhlIGlzIG5vdCBpbnN0YWxsZWQuIEluc3RhbGwgaXQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY2FtZXJvbmNvb2tlL0FYZS4iO2Z1bmN0aW9uIFc4KFgsRyl7Zm9yKHZhciBKIGluIEcpWFtKXT1HW0pdO3JldHVybiBYfWZ1bmN0aW9uIHQxKFgsRyl7Zm9yKHZhciBKIGluIFgpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBHKSlyZXR1cm4hMDtmb3IodmFyIFkgaW4gRylpZihZIT09Il9fc291cmNlIiYmWFtZXSE9PUdbWV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWjgoWCxHKXt0aGlzLnByb3BzPVgsdGhpcy5jb250ZXh0PUd9ZnVuY3Rpb24gbjEoWCxHKXtmdW5jdGlvbiBKKHEpe3ZhciBaPXRoaXMucHJvcHMucmVmO3JldHVybiBaIT1xLnJlZiYmWiYmKHR5cGVvZiBaPT0iZnVuY3Rpb24iP1oobnVsbCk6Wi5jdXJyZW50PW51bGwpLEc/IUcodGhpcy5wcm9wcyxxKXx8WiE9cS5yZWY6dDEodGhpcy5wcm9wcyxxKX1mdW5jdGlvbiBZKHEpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1KLEgwKFgscSl9cmV0dXJuIFkuZGlzcGxheU5hbWU9Ik1lbW8oIisoWC5kaXNwbGF5TmFtZXx8WC5uYW1lKSsiKSIsWS5fX2Y9WS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxZLnR5cGU9WCxZfShaOC5wcm90b3R5cGU9bmV3IHQpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLFo4LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWCxHKXtyZXR1cm4gdDEodGhpcy5wcm9wcyxYKXx8dDEodGhpcy5zdGF0ZSxHKX07dmFyIHE4PXcuX19iO3cuX19iPWZ1bmN0aW9uKFgpe1gudHlwZSYmWC50eXBlLl9fZiYmWC5yZWYmJihYLnByb3BzLnJlZj1YLnJlZixYLnJlZj1udWxsKSxxOCYmcTgoWCl9O3ZhciAkND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBmMChYKXtmdW5jdGlvbiBHKEope3ZhciBZPVc4KHt9LEopO3JldHVybiBkZWxldGUgWS5yZWYsWChZLEoucmVmfHxudWxsKX1yZXR1cm4gRy4kJHR5cGVvZj0kNCxHLnJlbmRlcj1YLEcucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Ry5fX2Y9ITAsRy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKyhYLmRpc3BsYXlOYW1lfHxYLm5hbWUpKyIpIixHfXZhciBWND13Ll9fZTt3Ll9fZT1mdW5jdGlvbihYLEcsSixZKXtpZihYLnRoZW4pe2Zvcih2YXIgcSxaPUc7Wj1aLl9fOylpZigocT1aLl9fYykmJnEuX19jKXJldHVybiBHLl9fZT09bnVsbCYmKEcuX19lPUouX19lLEcuX19rPUouX19rKSxxLl9fYyhYLEcpfVY0KFgsRyxKLFkpfTt2YXIgUTg9dy51bm1vdW50O2Z1bmN0aW9uIEs4KFgsRyxKKXtyZXR1cm4gWCYmKFguX19jJiZYLl9fYy5fX0gmJihYLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihZKXt0eXBlb2YgWS5fX2M9PSJmdW5jdGlvbiImJlkuX19jKCl9KSxYLl9fYy5fX0g9bnVsbCksKFg9Vzgoe30sWCkpLl9fYyE9bnVsbCYmKFguX19jLl9fUD09PUomJihYLl9fYy5fX1A9RyksWC5fX2MuX19lPSEwLFguX19jPW51bGwpLFguX19rPVguX19rJiZYLl9fay5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuIEs4KFksRyxKKX0pKSxYfWZ1bmN0aW9uIEg4KFgsRyxKKXtyZXR1cm4gWCYmSiYmKFguX192PW51bGwsWC5fX2s9WC5fX2smJlguX19rLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gSDgoWSxHLEopfSksWC5fX2MmJlguX19jLl9fUD09PUcmJihYLl9fZSYmSi5hcHBlbmRDaGlsZChYLl9fZSksWC5fX2MuX19lPSEwLFguX19jLl9fUD1KKSksWH1mdW5jdGlvbiBzMSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBEOChYKXt2YXIgRz1YLl9fJiZYLl9fLl9fYztyZXR1cm4gRyYmRy5fX2EmJkcuX19hKFgpfWZ1bmN0aW9uIE4xKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9dy51bm1vdW50PWZ1bmN0aW9uKFgpe3ZhciBHPVguX19jO0cmJihHLl9fej0hMCksRyYmRy5fX1ImJkcuX19SKCksRyYmMzImWC5fX3UmJihYLnR5cGU9bnVsbCksUTgmJlE4KFgpfSwoczEucHJvdG90eXBlPW5ldyB0KS5fX2M9ZnVuY3Rpb24oWCxHKXt2YXIgSj1HLl9fYyxZPXRoaXM7WS5vPT1udWxsJiYoWS5vPVtdKSxZLm8ucHVzaChKKTt2YXIgcT1EOChZLl9fdiksWj0hMSxfPWZ1bmN0aW9uKCl7Wnx8WS5fX3p8fChaPSEwLEouX19SPW51bGwscT9xKHopOnooKSl9O0ouX19SPV87dmFyICQ9Si5fX1A7Si5fX1A9bnVsbDt2YXIgej1mdW5jdGlvbigpe2lmKCEtLVkuX191KXtpZihZLnN0YXRlLl9fYSl7dmFyIEw9WS5zdGF0ZS5fX2E7WS5fX3YuX19rWzBdPUg4KEwsTC5fX2MuX19QLEwuX19jLl9fTyl9dmFyIEI7Zm9yKFkuc2V0U3RhdGUoe19fYTpZLl9fYj1udWxsfSk7Qj1ZLm8ucG9wKCk7KUIuX19QPSQsQi5mb3JjZVVwZGF0ZSgpfX07WS5fX3UrK3x8MzImRy5fX3V8fFkuc2V0U3RhdGUoe19fYTpZLl9fYj1ZLl9fdi5fX2tbMF19KSxYLnRoZW4oXyxfKX0sczEucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxzMS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKFgsRyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWT10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1LOCh0aGlzLl9fYixKLFkuX19PPVkuX19QKX10aGlzLl9fYj1udWxsfXZhciBxPUcuX19hJiZIMChsLG51bGwsWC5mYWxsYmFjayk7cmV0dXJuIHEmJihxLl9fdSY9LTMzKSxbSDAobCxudWxsLEcuX19hP251bGw6WC5jaGlsZHJlbikscV19O3ZhciBfOD1mdW5jdGlvbihYLEcsSil7aWYoKytKWzFdPT09SlswXSYmWC5sLmRlbGV0ZShHKSxYLnByb3BzLnJldmVhbE9yZGVyJiYoWC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8IVgubC5zaXplKSlmb3IoSj1YLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhaztYLmk9Sj1KWzJdfX07KE4xLnByb3RvdHlwZT1uZXcgdCkuX19hPWZ1bmN0aW9uKFgpe3ZhciBHPXRoaXMsSj1EOChHLl9fdiksWT1HLmwuZ2V0KFgpO3JldHVybiBZWzBdKyssZnVuY3Rpb24ocSl7dmFyIFo9ZnVuY3Rpb24oKXtHLnByb3BzLnJldmVhbE9yZGVyPyhZLnB1c2gocSksXzgoRyxYLFkpKTpxKCl9O0o/SihaKTpaKCl9fSxOMS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKFgpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBHPUIwKFguY2hpbGRyZW4pO1gucmV2ZWFsT3JkZXImJlgucmV2ZWFsT3JkZXJbMF09PT0iYiImJkcucmV2ZXJzZSgpO2Zvcih2YXIgSj1HLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoR1tKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gWC5jaGlsZHJlbn0sTjEucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1OMS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgWD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEcsSil7XzgoWCxKLEcpfSl9O3ZhciBMND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx6ND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sVzQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxLND0vW0EtWjAtOV0vZyxIND10eXBlb2YgZG9jdW1lbnQ8InUiLEQ0PWZ1bmN0aW9uKFgpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChYKX07dC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbihYKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsWCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIitYXX0sc2V0OmZ1bmN0aW9uKEcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFgse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpHfSl9fSl9KTt2YXIgJDg9dy5ldmVudDt3LmV2ZW50PWZ1bmN0aW9uKFgpe3JldHVybiAkOCYmKFg9JDgoWCkpLFgucGVyc2lzdD1mdW5jdGlvbigpe30sWC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sWC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxYLm5hdGl2ZUV2ZW50PVh9O3ZhciBPOCxPND17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sVjg9dy52bm9kZTt3LnZub2RlPWZ1bmN0aW9uKFgpe3R5cGVvZiBYLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihHKXt2YXJ7cHJvcHM6Six0eXBlOll9PUcscT17fSxaPVkuaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIF8gaW4gSil7dmFyICQ9SltfXTtpZighKF89PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmJD09bnVsbHx8SDQmJl89PT0iY2hpbGRyZW4iJiZZPT09Im5vc2NyaXB0Inx8Xz09PSJjbGFzcyJ8fF89PT0iY2xhc3NOYW1lIikpe3ZhciB6PV8udG9Mb3dlckNhc2UoKTtfPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP189InZhbHVlIjpfPT09ImRvd25sb2FkIiYmJD09PSEwPyQ9IiI6ej09PSJ0cmFuc2xhdGUiJiYkPT09Im5vIj8kPSExOnpbMF09PT0ibyImJnpbMV09PT0ibiI/ej09PSJvbmRvdWJsZWNsaWNrIj9fPSJvbmRibGNsaWNrIjp6IT09Im9uY2hhbmdlInx8WSE9PSJpbnB1dCImJlkhPT0idGV4dGFyZWEifHxENChKLnR5cGUpP3o9PT0ib25mb2N1cyI/Xz0ib25mb2N1c2luIjp6PT09Im9uYmx1ciI/Xz0ib25mb2N1c291dCI6VzQudGVzdChfKSYmKF89eik6ej1fPSJvbmlucHV0IjpaJiZ6NC50ZXN0KF8pP189Xy5yZXBsYWNlKEs0LCItJCYiKS50b0xvd2VyQ2FzZSgpOiQ9PT1udWxsJiYoJD12b2lkIDApLHo9PT0ib25pbnB1dCImJnFbXz16XSYmKF89Im9uaW5wdXRDYXB0dXJlIikscVtfXT0kfX1ZPT0ic2VsZWN0IiYmKHEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkocS52YWx1ZSkmJihxLnZhbHVlPUIwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTCl7TC5wcm9wcy5zZWxlY3RlZD1xLnZhbHVlLmluZGV4T2YoTC5wcm9wcy52YWx1ZSkhPS0xfSkpLHEuZGVmYXVsdFZhbHVlIT1udWxsJiYocS52YWx1ZT1CMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe0wucHJvcHMuc2VsZWN0ZWQ9cS5tdWx0aXBsZT9xLmRlZmF1bHRWYWx1ZS5pbmRleE9mKEwucHJvcHMudmFsdWUpIT0tMTpxLmRlZmF1bHRWYWx1ZT09TC5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhxLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNsYXNzTmFtZSIsTzQpKTpKLmNsYXNzTmFtZSYmKHEuY2xhc3M9cS5jbGFzc05hbWU9Si5jbGFzc05hbWUpLEcucHJvcHM9cX0oWCksWC4kJHR5cGVvZj1MNCxWOCYmVjgoWCl9O3ZhciBMOD13Ll9fcjt3Ll9fcj1mdW5jdGlvbihYKXtMOCYmTDgoWCksTzg9WC5fX2N9O3ZhciB6OD13LmRpZmZlZDt3LmRpZmZlZD1mdW5jdGlvbihYKXt6OCYmejgoWCk7dmFye3Byb3BzOkcsX19lOkp9PVg7SiE9bnVsbCYmWC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEcmJkcudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1HLnZhbHVlPT1udWxsPyIiOkcudmFsdWUpLE84PW51bGx9O3ZhciBDMD0zO2Z1bmN0aW9uIGUxKFgpe3JldHVybiBYPT09ImxhbmRzY2FwZV9sZWZ0Inx8WD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIFgxKFgpe3JldHVybiEhWCYmKGUxKFgub3JpZW50YXRpb24pfHxYLndpZHRoPlguaGVpZ2h0KX1mdW5jdGlvbiBQMShYKXtpZighWHx8WC53aWR0aDw9MHx8WC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEc9ZTEoWC5vcmllbnRhdGlvbil8fFgud2lkdGg+WC5oZWlnaHQsSj1HP01hdGgubWF4KFgud2lkdGgsWC5oZWlnaHQpOk1hdGgubWluKFgud2lkdGgsWC5oZWlnaHQpLFk9Rz9NYXRoLm1pbihYLndpZHRoLFguaGVpZ2h0KTpNYXRoLm1heChYLndpZHRoLFguaGVpZ2h0KTtpZihKPT09WC53aWR0aCYmWT09PVguaGVpZ2h0KXJldHVybiBYO3JldHVybnsuLi5YLHdpZHRoOkosaGVpZ2h0Oll9fWZ1bmN0aW9uIEcxKFgpe2xldCBHPVAxKFgpLEo9QjgoWD8ub3JpZW50YXRpb24pLFk9TWF0aC5hYnMoSik9PT05MCxxPSEhWCYmWC53aWR0aD5YLmhlaWdodCxaPUo9PT0xODB8fFkmJiFxO3JldHVybntkaXNwbGF5Q29uZmlnOkcscm90YXRpb25EZWdyZWVzOlo/SjowLG5lZWRzQ3NzUm90YXRpb246WixpbnB1dE9yaWVudGF0aW9uOlo/WD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBCOChYKXtzd2l0Y2goWCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBKMShYLEcsSil7c3dpdGNoKFgpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLUd9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpHfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUcseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6Ryx5Okp9fX1mdW5jdGlvbiBYOShYLEcpe3N3aXRjaChYKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goRyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEd9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChHKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gR31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goRyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEd9ZGVmYXVsdDpyZXR1cm4gR319dmFyIEI0PTA7ZnVuY3Rpb24gUShYLEcsSixZLHEsWil7R3x8KEc9e30pO3ZhciBfLCQsej1HO2lmKCJyZWYiaW4geilmb3IoJCBpbiB6PXt9LEcpJD09InJlZiI/Xz1HWyRdOnpbJF09R1skXTt2YXIgTD17dHlwZTpYLHByb3BzOnosa2V5OkoscmVmOl8sX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tQjQsX19pOi0xLF9fdTowLF9fc291cmNlOnEsX19zZWxmOlp9O2lmKHR5cGVvZiBYPT0iZnVuY3Rpb24iJiYoXz1YLmRlZmF1bHRQcm9wcykpZm9yKCQgaW4gXyl6WyRdPT09dm9pZCAwJiYoelskXT1fWyRdKTtyZXR1cm4gdy52bm9kZSYmdy52bm9kZShMKSxMfXZhciBGOD1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLEY0PTMsTjQ9NCxQND01O2Z1bmN0aW9uIFUxKHt1cmw6WCx3c1VybDpHLHN0eWxlOkosaW1hZ2VTdHlsZTpZLGNsYXNzTmFtZTpxLG9uSG9tZVByZXNzOlosb25TdHJlYW1Ub3VjaDpfLG9uU3RyZWFtTXVsdGlUb3VjaDokLG9uU3RyZWFtQnV0dG9uOnosc3Vic2NyaWJlRnJhbWU6TCxzdHJlYW1GcmFtZTpCLHN0cmVhbUNvbmZpZzpWLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOkgsaGlkZUNvbnRyb2xzOk8sb25TdHJlYW1pbmdDaGFuZ2U6VSxjb25uZWN0aW9uUXVhbGl0eTpQfSl7bGV0IEY9ISFfLEE9YihudWxsKSxJPWIobnVsbCkscz1iKG51bGwpLGg9YihudWxsKSxbYyxlXT1rKCExKSxbbixfMF09ayhudWxsKSxbZix5XT1rKG51bGwpLGQ9YihudWxsKSxZMT1iKEgpO1kxLmN1cnJlbnQ9SDtsZXQgYzA9YihudWxsKSxbUjAsYjFdPWsobnVsbCk7aigoKT0+e2xldCBEPWMwLmN1cnJlbnQ7aWYoIUR8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBXPW5ldyBSZXNpemVPYnNlcnZlcigoTik9PntsZXQgTT1OWzBdPy5jb250ZW50UmVjdDtpZihNKWIxKHt3aWR0aDpNLndpZHRoLGhlaWdodDpNLmhlaWdodH0pfSk7cmV0dXJuIFcub2JzZXJ2ZShEKSwoKT0+Vy5kaXNjb25uZWN0KCl9LFtdKTtsZXRbUDAsbDBdPWsoMCksVTA9YigwKSxbaDAsZzBdPWsoITEpLEwwPWIobnVsbCk7aigoKT0+e2lmKFA9PT0icG9vciIpe2lmKGcwKCEwKSxMMC5jdXJyZW50KWNsZWFyVGltZW91dChMMC5jdXJyZW50KTtMMC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntnMCghMSksTDAuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKGcwKCExKSxMMC5jdXJyZW50KWNsZWFyVGltZW91dChMMC5jdXJyZW50KSxMMC5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihMMC5jdXJyZW50KWNsZWFyVGltZW91dChMMC5jdXJyZW50KX19LFtQXSk7bGV0IGEwPWAke1h9L3N0cmVhbS5tanBlZ2A7aigoKT0+e2QuY3VycmVudD1udWxsLHkobnVsbCl9LFtYXSk7bGV0IEkwPVIoKEQpPT57aWYoIUR8fEQud2lkdGg8PTB8fEQuaGVpZ2h0PD0wKXJldHVybjtsZXQgVz1kLmN1cnJlbnQsTj1ELm9yaWVudGF0aW9uPT09dm9pZCAwJiZXPy5vcmllbnRhdGlvbj97Li4uRCxvcmllbnRhdGlvbjpXLm9yaWVudGF0aW9ufTpEO2lmKFcmJlcud2lkdGg9PT1OLndpZHRoJiZXLmhlaWdodD09PU4uaGVpZ2h0JiZXLm9yaWVudGF0aW9uPT09Ti5vcmllbnRhdGlvbilyZXR1cm47ZC5jdXJyZW50PU4seShOKSxZMS5jdXJyZW50Py4oTil9LFtdKSxpMD1iKFUpO2kwLmN1cnJlbnQ9VSxqKCgpPT57aTAuY3VycmVudD8uKGMpfSxbY10pLGooKCk9PntpZihGJiZWKUkwKFYpfSxbRixWLEkwXSk7bGV0IE0wPWIoITEpO00wLmN1cnJlbnQ9YztsZXQgQTA9YihudWxsKTtqKCgpPT57aWYoIUZ8fCFMKXJldHVybjtsZXQgVz1zZXRUaW1lb3V0KCgpPT57aWYoIU0wLmN1cnJlbnQpXzAoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxOPUwoKE0pPT57VTAuY3VycmVudCsrLEQwLmN1cnJlbnQ9RGF0ZS5ub3coKTtsZXQgRT1JLmN1cnJlbnQ7aWYoRSl7aWYoQTAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEEwLmN1cnJlbnQpO0EwLmN1cnJlbnQ9TSxFLnNyYz1NfWlmKCFNMC5jdXJyZW50KWNsZWFyVGltZW91dChXKSxlKCEwKSxfMChudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFcpLE4/LigpLEEwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChBMC5jdXJyZW50KSxBMC5jdXJyZW50PW51bGx9fSxbRixMXSk7bGV0IFgwPVIoKEQpPT57bGV0IFc9RzEoZC5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLE49SjEoVyxELngsRC55KSxNPUQuZWRnZT09PXZvaWQgMD92b2lkIDA6WDkoVyxELmVkZ2UpLEU9TT09PXZvaWQgMD97dHlwZTpELnR5cGUsLi4uTn06e3R5cGU6RC50eXBlLC4uLk4sZWRnZTpNfTtpZihGKXtfPy4oRSk7cmV0dXJufWxldCBtPWguY3VycmVudDtpZighbXx8bS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShFKSkscj1uZXcgVWludDhBcnJheSgxK28ubGVuZ3RoKTtyWzBdPUY0LHIuc2V0KG8sMSksbS5zZW5kKHIpfSxbRixfXSksYjA9UigoRCk9PntpZihGKXt6Py4oRCk7cmV0dXJufWxldCBXPWguY3VycmVudDtpZighV3x8Vy5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBOPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOkR9KSksTT1uZXcgVWludDhBcnJheSgxK04ubGVuZ3RoKTtNWzBdPU40LE0uc2V0KE4sMSksVy5zZW5kKE0pfSxbRix6XSksejA9UigoRCk9PntsZXQgVz1HMShkLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTj1KMShXLEQueDEsRC55MSksTT1KMShXLEQueDIsRC55MiksRT17dHlwZTpELnR5cGUseDE6Ti54LHkxOk4ueSx4MjpNLngseTI6TS55fTtpZihGKXskPy4oRSk7cmV0dXJufWxldCBtPWguY3VycmVudDtpZighbXx8bS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShFKSkscj1uZXcgVWludDhBcnJheSgxK28ubGVuZ3RoKTtyWzBdPVA0LHIuc2V0KG8sMSksbS5zZW5kKHIpfSxbRiwkXSk7aigoKT0+e2lmKEYpcmV0dXJuO2xldCBEPW5ldyBBYm9ydENvbnRyb2xsZXIsVz0oKT0+e2ZldGNoKGAke1h9L2NvbmZpZ2Ase3NpZ25hbDpELnNpZ25hbH0pLnRoZW4oKFExKT0+UTEuanNvbigpKS50aGVuKChRMSk9PntJMChRMSl9KS5jYXRjaCgoKT0+e30pfTtXKCk7bGV0IE49c2V0SW50ZXJ2YWwoVywxMDAwKSxNPUc/P1gucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLEU9bmV3IFdlYlNvY2tldChNKTtFLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixoLmN1cnJlbnQ9RSxFLm9ub3Blbj0oKT0+e2UoITApLF8wKG51bGwpfSxFLm9uY2xvc2U9KCk9PntlKCExKX0sRS5vbmVycm9yPSgpPT57XzAoIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpLGUoITEpfTtsZXQgbT1uZXcgQWJvcnRDb250cm9sbGVyLG89c2V0SW50ZXJ2YWwoKCk9PntsMChVMC5jdXJyZW50KSxVMC5jdXJyZW50PTB9LDEwMDApLHI9ITEsVzk9c2V0VGltZW91dCgoKT0+e2lmKCFyKV8wKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7bGV0IEs5PShhd2FpdCBmZXRjaChhMCx7c2lnbmFsOm0uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFLOSlyZXR1cm47bGV0IFMxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTpnOCx2YWx1ZTp2MX09YXdhaXQgSzkucmVhZCgpO2lmKGc4KWJyZWFrO2lmKHYxKWZvcihsZXQgeTE9MDt5MTw9djEubGVuZ3RoLVMxLmxlbmd0aDt5MSsrKXtsZXQgSDk9ITA7Zm9yKGxldCBfMT0wO18xPFMxLmxlbmd0aDtfMSsrKWlmKHYxW3kxK18xXSE9PVMxW18xXSl7SDk9ITE7YnJlYWt9aWYoSDkpe2lmKFUwLmN1cnJlbnQrKywhcilyPSEwLGNsZWFyVGltZW91dChXOSl9fX19Y2F0Y2h7fX0pKCksKCk9PnttLmFib3J0KCksRC5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoTiksY2xlYXJJbnRlcnZhbChvKSxjbGVhclRpbWVvdXQoVzkpLEUuY2xvc2UoKSxoLmN1cnJlbnQ9bnVsbH19LFtYLGEwLEYsSTAsR10pO2xldCBEMD1iKDApO2ooKCk9PntpZighRilyZXR1cm47bGV0IEQ9MjAwMCxXPSgpPT57bGV0IEU9RDAuY3VycmVudDtpZighRXx8IU0wLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktRT5EKWUoITEpfSxOPXNldEludGVydmFsKCgpPT57bDAoVTAuY3VycmVudCksVTAuY3VycmVudD0wLFcoKX0sMTAwMCksTT0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pVygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsTSksKCk9PntjbGVhckludGVydmFsKE4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLE0pfX0sW0ZdKTtsZXQgbzA9UigoKT0+e3JldHVybiBGP0kuY3VycmVudDpBLmN1cnJlbnR9LFtGXSksJDA9UigoKT0+e3JldHVybiBzLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9vMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW28wXSksajA9UigoRCxXKT0+e2xldCBOPSQwKCk7aWYoIU4pcmV0dXJuO2xldCBNPShXLmNsaWVudFgtTi5sZWZ0KS9OLndpZHRoLEU9KFcuY2xpZW50WS1OLnRvcCkvTi5oZWlnaHQ7WDAoe3R5cGU6RCx4Ok0seTpFfSl9LFskMCxYMF0pLEcwPWIoITEpLEs9YighMSksVD1iKCExKSxTPWIoe2R4OjAsZHk6MH0pLHY9YighMSksW3UsaV09ayghMSksVzA9Yih7eDowLjUseTowLjV9KSxbcCxnXT1rKG51bGwpO2ooKCk9PntsZXQgRD0oTik9PntpZihOLmtleT09PSJBbHQiKWkoITApfSxXPShOKT0+e2lmKE4ua2V5PT09IkFsdCIpe2lmKGkoITEpLCFLLmN1cnJlbnQpZyhudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixXKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpfX0sW10pLGooKCk9PntpZih1JiYhSy5jdXJyZW50KXtsZXQgRD1XMC5jdXJyZW50O2coe3gxOkQueCx5MTpELnkseDI6MS1ELngseTI6MS1ELnl9KX1lbHNlIGlmKCF1JiYhSy5jdXJyZW50KWcobnVsbCl9LFt1XSk7bGV0IFkwPWIobnVsbCksUzA9YighMSksSzA9YigwKSxtMD1SKChELFcpPT57UzAuY3VycmVudD0hMDtsZXQgTj1ZMC5jdXJyZW50O2lmKE4pY2FuY2VsQW5pbWF0aW9uRnJhbWUoSzAuY3VycmVudCksSzAuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntOLnN0eWxlLmxlZnQ9YCR7RCoxMDB9JWAsTi5zdHlsZS50b3A9YCR7VyoxMDB9JWAsTi5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLHYwPVIoKEQsVyk9PntpZighUzAuY3VycmVudClyZXR1cm47bGV0IE49WTAuY3VycmVudDtpZihOKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEswLmN1cnJlbnQpLEswLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ti5zdHlsZS5sZWZ0PWAke0QqMTAwfSVgLE4uc3R5bGUudG9wPWAke1cqMTAwfSVgfSl9LFtdKSx3MD1SKCgpPT57UzAuY3VycmVudD0hMTtsZXQgRD1ZMC5jdXJyZW50O2lmKEQpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSzAuY3VycmVudCksRC5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLFoxPWIoMCkscjA9YihudWxsKSxoOD1SKCgpPT57bGV0IEQ9RGF0ZS5ub3coKSxXPUQtWjEuY3VycmVudDtpZihaMS5jdXJyZW50PUQsVzwzMDApe2lmKHIwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHIwLmN1cnJlbnQpLHIwLmN1cnJlbnQ9bnVsbDtpZihaKVooKTtlbHNlIGIwKCJhcHBfc3dpdGNoZXIiKX1lbHNlIHIwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFopWigpO2Vsc2UgYjAoImhvbWUiKTtyMC5jdXJyZW50PW51bGx9LDMwMCl9LFtiMCxaXSksajE9RzEoZiksczA9ajEuZGlzcGxheUNvbmZpZyxUMD0oKCk9PntpZighczB8fCFSMClyZXR1cm4gbnVsbDtpZihSMC53aWR0aD09PTB8fFIwLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IEQ9TWF0aC5taW4oUjAud2lkdGgvczAud2lkdGgsUjAuaGVpZ2h0L3MwLmhlaWdodCk7cmV0dXJue3dpZHRoOnMwLndpZHRoKkQsaGVpZ2h0OnMwLmhlaWdodCpEfX0pKCkscTE9ajEucm90YXRpb25EZWdyZWVzLFY5PWoxLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKHExKT09PTkwLEw5PVksejk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6VjkmJlQwP2Ake1QwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpWOSYmVDA/YCR7VDAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7cTE9PT0wPyIiOmAgcm90YXRlKCR7cTF9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpGOCxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlksLi4ucTE9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fTtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLk8/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpxLGNoaWxkcmVuOltRKCJkaXYiLHtyZWY6YzAsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46USgiZGl2Iix7cmVmOnMsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6VDA/YCR7VDAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6VDA/YCR7VDAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOkw5Py5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6TDk/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbUSgiaW1nIix7cmVmOkEsc3JjOkY/dm9pZCAwOmEwLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEQpPT57bGV0IFc9RC5jdXJyZW50VGFyZ2V0O2lmKFcubmF0dXJhbFdpZHRoPjAmJlcubmF0dXJhbEhlaWdodD4wKUkwKHt3aWR0aDpXLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Vy5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkY/e2Rpc3BsYXk6Im5vbmUifTp6OX0pLEYmJlEoImltZyIse3JlZjpJLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEQpPT57bGV0IFc9RC5jdXJyZW50VGFyZ2V0O2lmKFcubmF0dXJhbFdpZHRoPjAmJlcubmF0dXJhbEhlaWdodD4wKUkwKHt3aWR0aDpXLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Vy5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOno5fSksUSgiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6RjgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IFc9JDAoKTtpZighVylyZXR1cm47bGV0IE49KEQuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsTT0oRC5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtpZihELmFsdEtleSl7Sy5jdXJyZW50PSEwLFQuY3VycmVudD1ELnNoaWZ0S2V5O2xldCBFPXt4MTpOLHkxOk0seDI6MS1OLHkyOjEtTX07Uy5jdXJyZW50PXtkeDoxLU4tTixkeToxLU0tTX0sZyhFKSx6MCh7dHlwZToiYmVnaW4iLC4uLkV9KTtyZXR1cm59aWYobTAoTixNKSxNPjAuODgpRzAuY3VycmVudD0hMCxYMCh7dHlwZToiYmVnaW4iLHg6Tix5Ok0sZWRnZTpDMH0pO2Vsc2UgRzAuY3VycmVudD0hMSxqMCgiYmVnaW4iLEQpfSxvbk1vdXNlTW92ZTooRCk9PntsZXQgVz0kMCgpO2lmKCFXKXJldHVybjtsZXQgTj0oRC5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxNPShELmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2lmKFcwLmN1cnJlbnQ9e3g6Tix5Ok19LEQuYnV0dG9ucz09PTApe2lmKEQuYWx0S2V5KWcoe3gxOk4seTE6TSx4MjoxLU4seTI6MS1NfSk7cmV0dXJufWlmKEsuY3VycmVudCl7bGV0IEU7aWYoVC5jdXJyZW50KXtsZXQgbT1TLmN1cnJlbnQ7RT17eDE6Tix5MTpNLHgyOk4rbS5keCx5MjpNK20uZHl9fWVsc2UgRT17eDE6Tix5MTpNLHgyOjEtTix5MjoxLU19O2coRSksejAoe3R5cGU6Im1vdmUiLC4uLkV9KTtyZXR1cm59aWYodjAoTixNKSxHMC5jdXJyZW50KVgwKHt0eXBlOiJtb3ZlIix4Ok4seTpNLGVkZ2U6QzB9KTtlbHNlIGowKCJtb3ZlIixEKX0sb25Nb3VzZVVwOihEKT0+e2lmKEsuY3VycmVudCl7bGV0IFc9JDAoKTtpZihXKXtsZXQgTj0oRC5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxNPShELmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2lmKFQuY3VycmVudCl7bGV0IEU9Uy5jdXJyZW50O3owKHt0eXBlOiJlbmQiLHgxOk4seTE6TSx4MjpOK0UuZHgseTI6TStFLmR5fSl9ZWxzZSB6MCh7dHlwZToiZW5kIix4MTpOLHkxOk0seDI6MS1OLHkyOjEtTX0pfWlmKEsuY3VycmVudD0hMSwhRC5hbHRLZXkpZyhudWxsKTtyZXR1cm59aWYodzAoKSxHMC5jdXJyZW50KXtsZXQgVz0kMCgpO2lmKFcpe2xldCBOPShELmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLE09KEQuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7WDAoe3R5cGU6ImVuZCIseDpOLHk6TSxlZGdlOkMwfSl9RzAuY3VycmVudD0hMTtyZXR1cm59ajAoImVuZCIsRCl9LG9uTW91c2VMZWF2ZTooRCk9PntpZihLLmN1cnJlbnQpe2lmKHApejAoe3R5cGU6ImVuZCIsLi4ucH0pO0suY3VycmVudD0hMSxnKG51bGwpO3JldHVybn1pZih3MCgpLEcwLmN1cnJlbnQpe2xldCBXPSQwKCk7aWYoVyl7bGV0IE49KEQuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsTT0oRC5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtYMCh7dHlwZToiZW5kIix4Ok4seTpNLGVkZ2U6QzB9KX1HMC5jdXJyZW50PSExO3JldHVybn1pZihELmJ1dHRvbnM+MClqMCgiZW5kIixEKTtnKG51bGwpfSxvblRvdWNoU3RhcnQ6KEQpPT57RC5wcmV2ZW50RGVmYXVsdCgpO2xldCBXPSQwKCk7aWYoIVcpcmV0dXJuO2lmKEQudG91Y2hlcy5sZW5ndGg+PTIpe3cwKCk7bGV0IG09RC50b3VjaGVzWzBdLG89RC50b3VjaGVzWzFdLHI9e3gxOihtLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHkxOihtLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0LHgyOihvLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHkyOihvLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0fTtpZighdi5jdXJyZW50JiYhRzAuY3VycmVudClYMCh7dHlwZToiZW5kIix4OnIueDEseTpyLnkxfSk7di5jdXJyZW50PSEwLEsuY3VycmVudD0hMCxHMC5jdXJyZW50PSExLGcociksejAoe3R5cGU6ImJlZ2luIiwuLi5yfSk7cmV0dXJufWxldCBOPUQudG91Y2hlc1swXTtpZighTilyZXR1cm47bGV0IE09KE4uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsRT0oTi5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtpZihtMChNLEUpLEU+MC44OClHMC5jdXJyZW50PSEwLFgwKHt0eXBlOiJiZWdpbiIseDpNLHk6RSxlZGdlOkMwfSk7ZWxzZSBHMC5jdXJyZW50PSExLFgwKHt0eXBlOiJiZWdpbiIseDpNLHk6RX0pfSxvblRvdWNoTW92ZTooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IFc9JDAoKTtpZighVylyZXR1cm47aWYodi5jdXJyZW50JiZELnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgbT1ELnRvdWNoZXNbMF0sbz1ELnRvdWNoZXNbMV0scj17eDE6KG0uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgseTE6KG0uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQseDI6KG8uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgseTI6KG8uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHR9O2cociksejAoe3R5cGU6Im1vdmUiLC4uLnJ9KTtyZXR1cm59bGV0IE49RC50b3VjaGVzWzBdO2lmKCFOKXJldHVybjtsZXQgTT0oTi5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxFPShOLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2lmKHYwKE0sRSksRzAuY3VycmVudClYMCh7dHlwZToibW92ZSIseDpNLHk6RSxlZGdlOkMwfSk7ZWxzZSBYMCh7dHlwZToibW92ZSIseDpNLHk6RX0pfSxvblRvdWNoRW5kOihEKT0+e0QucHJldmVudERlZmF1bHQoKTtsZXQgVz0kMCgpO2lmKCFXKXJldHVybjtpZih2LmN1cnJlbnQpe2lmKEQudG91Y2hlcy5sZW5ndGg8Mil7bGV0IG09RC5jaGFuZ2VkVG91Y2hlc1swXSxvPXA7aWYobSYmbyl6MCh7dHlwZToiZW5kIix4MToobS5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx5MToobS5jbGllbnRZLVcudG9wKS9XLmhlaWdodCx4MjpvLngyLHkyOm8ueTJ9KTtlbHNlIGlmKG8pejAoe3R5cGU6ImVuZCIsLi4ub30pO3YuY3VycmVudD0hMSxLLmN1cnJlbnQ9ITEsZyhudWxsKX1yZXR1cm59bGV0IE49RC5jaGFuZ2VkVG91Y2hlc1swXTtpZighTilyZXR1cm47bGV0IE09KE4uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsRT0oTi5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtpZih3MCgpLEcwLmN1cnJlbnQpWDAoe3R5cGU6ImVuZCIseDpNLHk6RSxlZGdlOkMwfSksRzAuY3VycmVudD0hMTtlbHNlIFgwKHt0eXBlOiJlbmQiLHg6TSx5OkV9KX19KSxRKCJkaXYiLHtyZWY6WTAsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxwJiZRKGwse2NoaWxkcmVuOltRKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpVOChwLngxLHAueTEpfSksUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VTgocC54MixwLnkyKX0pXX0pLCFjJiYhbiYmUSgiZGl2Iix7c3R5bGU6ey4uLk44LC4uLll8fHt9fSxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxuJiZRKCJkaXYiLHtzdHlsZTpOOCxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46bn0pfSksaDAmJlEoImRpdiIse3N0eWxlOlU0LGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFPJiZRKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltRKCJidXR0b24iLHtvbkNsaWNrOmg4LHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxRKCJzcGFuIix7c3R5bGU6e2NvbG9yOlAwPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltQJiZRKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6UD09PSJnb29kIj8iIzRhZGU4MCI6UD09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxQMCwiIGZwcyJdfSldfSldfSl9dmFyIFU0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sTjg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFA4PTIwO2Z1bmN0aW9uIFU4KFgsRyl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtYKjEwMH0lYCx0b3A6YCR7RyoxMDB9JWAsd2lkdGg6UDgsaGVpZ2h0OlA4LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIGQwKFgpe2lmKCFYKXJldHVybiJpcGhvbmUiO2xldCBHPVgudG9Mb3dlckNhc2UoKTtpZihHLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEcuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihHLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgVjA9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LHM2PVYwLmlwaG9uZS53aWR0aCx0Nj1WMC5pcGhvbmUuaGVpZ2h0LG42PVYwLmlwaG9uZS5iZXplbFgsZTY9VjAuaXBob25lLmJlemVsWSxYWD1WMC5pcGhvbmUuaW5uZXJSYWRpdXMsSTg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBJMShYLEcpe2xldCBKPVgmJlgud2lkdGg+MCYmWC5oZWlnaHQ+MD9YOkcsWT1QMShKKTtpZihZKXJldHVybmAke1kud2lkdGh9IC8gJHtZLmhlaWdodH1gO3JldHVybmAke1YwLmlwaG9uZS53aWR0aC0yKlYwLmlwaG9uZS5iZXplbFh9IC8gJHtWMC5pcGhvbmUuaGVpZ2h0LTIqVjAuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIE0xKFg9ImlwaG9uZSIsRyl7bGV0IEo9Rz9JOFtHXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IFk9VjBbWF07cmV0dXJue3dpZHRoOlkud2lkdGgtMipZLmJlemVsWCxoZWlnaHQ6WS5oZWlnaHQtMipZLmJlemVsWX19ZnVuY3Rpb24gQTEoWD0iaXBob25lIixHKXtpZihYMShHKSlzd2l0Y2goWCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChYKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIHcxKFg9ImlwaG9uZSIsRyl7bGV0IEo9VjBbWF0sWT1KLndpZHRoLTIqSi5iZXplbFgscT1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKFk8cSYmWDEoRykpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9xKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1kqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvWSoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9xKjEwMH0lYH12YXIgRzk9RjAobnVsbCk7ZnVuY3Rpb24gVDEoWCl7bGV0IEc9RTAoRzkpO2lmKCFHKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4ke1h9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gR312YXIgdzQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBUNCh7ZXhlYzpYLG9uUm90YXRlOkcsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlksZGV2aWNlTmFtZTpxLGRldmljZVJ1bnRpbWU6WixzdHJlYW1pbmc6Xz0hMSxkaXNhYmxlZDokPSExLGNoaWxkcmVuOnosc3R5bGU6TCwuLi5CfSl7bGV0IFY9ZDAocSksTz17ZXhlYzpYLG9uUm90YXRlOkcsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlksZGV2aWNlTmFtZTpxLGRldmljZVJ1bnRpbWU6WixkZXZpY2VUeXBlOlYsc3RyZWFtaW5nOl8sZGlzYWJsZWQ6JHx8IVl8fCFffTtyZXR1cm4gUShHOS5Qcm92aWRlcix7dmFsdWU6TyxjaGlsZHJlbjpRKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLnc0LC4uLkx9LC4uLkIsY2hpbGRyZW46en0pfSl9dmFyIGs0PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxFND1mMChmdW5jdGlvbih7bmFtZTpHLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WSxzdHlsZTpxLG9uTW91c2VFbnRlcjpaLG9uTW91c2VMZWF2ZTpfLC4uLiR9LHope2xldCBMPVQxKCJUaXRsZSIpLFtCLFZdPWsoITEpLEg9Rz8/TC5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixPPUo/PyhMLmRldmljZVJ1bnRpbWU/TC5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOnosdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihVKT0+e1YoITApLFo/LihVKX0sb25Nb3VzZUxlYXZlOihVKT0+e1YoITEpLF8/LihVKX0sc3R5bGU6ey4uLms0LGJhY2tncm91bmQ6Qj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLnF9LC4uLiQsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbSCwhWSYmUSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpRKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpPfSldfSl9KSxDND17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIFI0KHtzdHlsZTpYLC4uLkd9KXtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLkM0LC4uLlh9LC4uLkd9KX12YXIgYjQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIn0sazE9ZjAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6RyxzdHlsZTpKLGRpc2FibGVkOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlosY2hpbGRyZW46XywuLi4kfSx6KXtsZXQgTD1FMChHOSksQj1ZfHxHfHxMPy5kaXNhYmxlZCxbVixIXT1rKCExKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOnosdHlwZToiYnV0dG9uIixkaXNhYmxlZDpCLG9uTW91c2VFbnRlcjooTyk9PntIKCEwKSxxPy4oTyl9LG9uTW91c2VMZWF2ZTooTyk9PntIKCExKSxaPy4oTyl9LHN0eWxlOnsuLi5iNCxjb2xvcjpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOlYmJiFCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkI/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uSn0sLi4uJCxjaGlsZHJlbjpffSl9KTtmdW5jdGlvbiBqNCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoRyk9PmAtZSAnJHtHfSdgKS5yZWR1Y2UoKEcsSik9PmAke0d9ICR7Sn1gLCJvc2FzY3JpcHQiKX12YXIgUzQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sdjQ9USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLHk0PVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTE0LjUgNGgtNUw3IDdINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtM3oifSksUSgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjQifSldfSksaDQ9USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMTIgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTEwLjIzMDUgMTIuODA3N0g0LjQyMzgzQzMuOTIzODMgMTIuODA3NyAzLjU0Njg4IDEyLjY4NDYgMy4yOTI5NyAxMi40Mzg1QzMuMDQyOTcgMTIuMTk2MyAyLjkxNzk3IDExLjgxOTQgMi45MTc5NyAxMS4zMDc3VjUuNTEyNzRDMi45MTc5NyA0Ljk5NzExIDMuMDQyOTcgNC42MTgyMSAzLjI5Mjk3IDQuMzc2MDJDMy41NDY4OCA0LjEyOTkzIDMuOTIzODMgNC4wMDY4OCA0LjQyMzgzIDQuMDA2ODhIMTAuMjMwNUMxMC43MzQ0IDQuMDA2ODggMTEuMTExMyA0LjEyOTkzIDExLjM2MTMgNC4zNzYwMkMxMS42MTEzIDQuNjE4MjEgMTEuNzM2MyA0Ljk5NzExIDExLjczNjMgNS41MTI3NFYxMS4zMDc3QzExLjczNjMgMTEuODE5NCAxMS42MTEzIDEyLjE5NjMgMTEuMzYxMyAxMi40Mzg1QzExLjExMTMgMTIuNjg0NiAxMC43MzQ0IDEyLjgwNzcgMTAuMjMwNSAxMi44MDc3Wk0xMC4yMTI5IDExLjg2NDNDMTAuNDE2IDExLjg2NDMgMTAuNTYyNSAxMS44MTk0IDEwLjY1MjMgMTEuNzI5NUMxMC43NDYxIDExLjY0MzYgMTAuNzkzIDExLjQ5NzEgMTAuNzkzIDExLjI5MDFWNS41MjQ0NkMxMC43OTMgNS4zMTc0MyAxMC43NDYxIDUuMTcwOTQgMTAuNjUyMyA1LjA4NTAxQzEwLjU2MjUgNC45OTUxNiAxMC40MTYgNC45NTAyNCAxMC4yMTI5IDQuOTUwMjRINC40NDE0MUM0LjI0MjE5IDQuOTUwMjQgNC4wOTU3IDQuOTk1MTYgNC4wMDE5NSA1LjA4NTAxQzMuOTA4MiA1LjE3MDk0IDMuODYxMzMgNS4zMTc0MyAzLjg2MTMzIDUuNTI0NDZWMTEuMjkwMUMzLjg2MTMzIDExLjQ5NzEgMy45MDgyIDExLjY0MzYgNC4wMDE5NSAxMS43Mjk1QzQuMDk1NyAxMS44MTk0IDQuMjQyMTkgMTEuODY0MyA0LjQ0MTQxIDExLjg2NDNIMTAuMjEyOVpNMi45MTc5NyAyLjU4MzA1VjAuNDE1MDgzQzIuOTE3OTcgMC4yMDAyNCAyLjk4NjMzIDAuMDY5MzgwMyAzLjEyMzA1IDAuMDIyNTA1M0MzLjI1OTc3IC0wLjAyODI3NTkgMy40MTAxNiAwLjAwNjg4MDMzIDMuNTc0MjIgMC4xMjc5NzRMNS4wNTA3OCAxLjIxMTk2QzUuMTc1NzggMS4zMDU3MSA1LjIzODI4IDEuNDAxNDEgNS4yMzgyOCAxLjQ5OTA3QzUuMjM4MjggMS41OTY3MiA1LjE3NTc4IDEuNjkyNDMgNS4wNTA3OCAxLjc4NjE4TDMuNTc0MjIgMi44NjQzQzMuNDEwMTYgMi45ODU0IDMuMjU5NzcgMy4wMjI1MSAzLjEyMzA1IDIuOTc1NjNDMi45ODYzMyAyLjkyNDg1IDIuOTE3OTcgMi43OTM5OSAyLjkxNzk3IDIuNTgzMDVaTTMuNTMzMiAxLjE1MzM2QzMuNjI2OTUgMS4xNTMzNiAzLjcwNzAzIDEuMTg2NTcgMy43NzM0NCAxLjI1Mjk3QzMuODQzNzUgMS4zMTkzOCAzLjg3ODkxIDEuMzk3NTEgMy44Nzg5MSAxLjQ4NzM1QzMuODc4OTEgMS41ODExIDMuODQzNzUgMS42NjMxMyAzLjc3MzQ0IDEuNzMzNDRDMy43MDcwMyAxLjc5OTg1IDMuNjI2OTUgMS44MzMwNSAzLjUzMzIgMS44MzMwNUgyLjgwNjY0QzIuMzgwODYgMS44MzMwNSAyLjAxMTcyIDEuOTI0ODUgMS42OTkyMiAyLjEwODQ0QzEuMzkwNjIgMi4yODgxMyAxLjE1MjM0IDIuNTM4MTMgMC45ODQzNzUgMi44NTg0NEMwLjgxNjQwNiAzLjE3ODc2IDAuNzMyNDIyIDMuNTQ1OTQgMC43MzI0MjIgMy45NjAwMVY0LjgzODkxQzAuNzMyNDIyIDQuOTM2NTcgMC42OTcyNjYgNS4wMjI1MSAwLjYyNjk1MyA1LjA5NjcyQzAuNTUyNzM0IDUuMTY3MDQgMC40NjQ4NDQgNS4yMDIxOSAwLjM2MzI4MSA1LjIwMjE5QzAuMjY1NjI1IDUuMjAyMTkgMC4xODE2NDEgNS4xNjcwNCAwLjExMTMyOCA1LjA5NjcyQzAuMDM3MTA5NCA1LjAyMjUxIDAgNC45MzY1NyAwIDQuODM4OTFWMy45NjAwMUMwIDMuNDAxNDEgMC4xMTcxODggMi45MTExOCAwLjM1MTU2MiAyLjQ4OTNDMC41ODIwMzEgMi4wNjc0MyAwLjkwODIwMyAxLjczOTMgMS4zMzAwOCAxLjUwNDkzQzEuNzQ4MDUgMS4yNzA1NSAyLjIzODI4IDEuMTUzMzYgMi44MDA3OCAxLjE1MzM2SDMuNTMzMloifSl9KSxnND1mMChmdW5jdGlvbih7b25DbGljazpHLC4uLkp9LFkpe2xldCBxPVQxKCJIb21lQnV0dG9uIik7cmV0dXJuIFEoazEse3JlZjpZLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWik9PntpZihHPy4oWiksWi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihxLmRldmljZVR5cGU9PT0id2F0Y2giKXEuZXhlYyhqNCgpKTtlbHNlIHEuZXhlYygic2VydmUtc2ltIGJ1dHRvbiBob21lIil9LC4uLkosY2hpbGRyZW46djR9KX0pLG00PWYwKGZ1bmN0aW9uKHtvbkNsaWNrOkcsLi4uSn0sWSl7bGV0IHE9VDEoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gUShrMSx7cmVmOlksImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihaKT0+e2lmKEc/LihaKSxaLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKHEuZGV2aWNlVWRpZClxLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke3EuZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46eTR9KX0pLHg0PWYwKGZ1bmN0aW9uKHtvbkNsaWNrOkcsZm9yY2VEaXNhYmxlZDpKLC4uLll9LHEpe2xldCBaPVQxKCJSb3RhdGVCdXR0b24iKSxfPVouZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFouZGV2aWNlVHlwZT09PSJ2aXNpb24iLFskLHpdPWsoInBvcnRyYWl0Iik7cmV0dXJuIGooKCk9Pnt6KFoub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWi5kZXZpY2VVZGlkLFoub3JpZW50YXRpb25dKSxRKGsxLHtyZWY6cSwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8XyxvbkNsaWNrOihMKT0+e2lmKEc/LihMKSxMLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFaLmRldmljZVVkaWR8fF8pcmV0dXJuO2xldCBCPVM0W1oub3JpZW50YXRpb24/PyRdO2lmKHooQiksWi5vblJvdGF0ZSlaLm9uUm90YXRlKEIpO2Vsc2UgWi5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7Qn0gLWQgJHtaLmRldmljZVVkaWR9YCl9LC4uLlksY2hpbGRyZW46aDR9KX0pLEowPVQ0O0owLlRpdGxlPUU0O0owLkFjdGlvbnM9UjQ7SjAuQnV0dG9uPWsxO0owLkhvbWVCdXR0b249ZzQ7SjAuU2NyZWVuc2hvdEJ1dHRvbj1tNDtKMC5Sb3RhdGVCdXR0b249eDQ7ZnVuY3Rpb24gcDQoWCl7bGV0W0csSl09ayhudWxsKSxZPWIobmV3IFNldCkscT1SKChaKT0+e3JldHVybiBZLmN1cnJlbnQuYWRkKFopLCgpPT57WS5jdXJyZW50LmRlbGV0ZShaKX19LFtdKTtyZXR1cm4gaigoKT0+e2lmKCFYKXJldHVybjtsZXQgWj1uZXcgQWJvcnRDb250cm9sbGVyLF89ITEsJD1udWxsLHo9WC5yZXBsYWNlKC9cL3N0cmVhbVwubWpwZWckLywiIiksTD0oRik9PntpZihGLndpZHRoPD0wfHxGLmhlaWdodDw9MClyZXR1cm47SigoQSk9PkEmJkEud2lkdGg9PT1GLndpZHRoJiZBLmhlaWdodD09PUYuaGVpZ2h0JiZBLm9yaWVudGF0aW9uPT09Ri5vcmllbnRhdGlvbj9BOkYpfSxCPSgpPT57ZmV0Y2goYCR7en0vY29uZmlnYCx7c2lnbmFsOlouc2lnbmFsfSkudGhlbigoRik9PkYuanNvbigpKS50aGVuKEwpLmNhdGNoKCgpPT57fSl9O0IoKTtsZXQgVj1zZXRJbnRlcnZhbChCLDEwMDApLEg9bmV3IFVSTChYKTtILnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgTz1ILnRvU3RyaW5nKCksVT0oKT0+e2lmKF98fFouc2lnbmFsLmFib3J0ZWR8fCQpcmV0dXJuOyQ9c2V0VGltZW91dCgoKT0+eyQ9bnVsbCxQKCl9LDEwMDApfSxQPWFzeW5jKCk9Pnt0cnl7bGV0IEE9KGF3YWl0IGZldGNoKE8se3NpZ25hbDpaLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighQSl7VSgpO3JldHVybn1sZXQgST1uZXcgVWludDhBcnJheSgwKTt3aGlsZSghMCl7bGV0e2RvbmU6cyx2YWx1ZTpofT1hd2FpdCBBLnJlYWQoKTtpZihzKWJyZWFrO2xldCBjPW5ldyBVaW50OEFycmF5KEkubGVuZ3RoK2gubGVuZ3RoKTtjLnNldChJKSxjLnNldChoLEkubGVuZ3RoKSxJPWM7d2hpbGUoITApe2xldCBlPS0xO2ZvcihsZXQgZD0wO2Q8SS5sZW5ndGgtMTtkKyspaWYoSVtkXT09PTI1NSYmSVtkKzFdPT09MjE2KXtlPWQ7YnJlYWt9aWYoZT09PS0xKWJyZWFrO2xldCBuPS0xO2ZvcihsZXQgZD1lKzI7ZDxJLmxlbmd0aC0xO2QrKylpZihJW2RdPT09MjU1JiZJW2QrMV09PT0yMTcpe249ZCsyO2JyZWFrfWlmKG49PT0tMSlicmVhaztsZXQgXzA9SS5zbGljZShlLG4pO0k9SS5zbGljZShuKTtsZXQgZj1uZXcgQmxvYihbXzBdLHt0eXBlOiJpbWFnZS9qcGVnIn0pLHk9VVJMLmNyZWF0ZU9iamVjdFVSTChmKTtpZihZLmN1cnJlbnQuc2l6ZT09PTApe1VSTC5yZXZva2VPYmplY3RVUkwoeSk7Y29udGludWV9Zm9yKGxldCBkIG9mIFkuY3VycmVudClkKHkpfX19Y2F0Y2h7fWZpbmFsbHl7VSgpfX07cmV0dXJuIFAoKSwoKT0+e2lmKF89ITAsJCljbGVhclRpbWVvdXQoJCk7Wi5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoVil9fSxbWF0pLHtzdWJzY3JpYmVGcmFtZTpxLGZyYW1lOm51bGwsY29uZmlnOkd9fXZhciBmND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gZDQoWCl7cmV0dXJuIGY0W1hdPz9udWxsfWZ1bmN0aW9uIFE5KFgpe2xldCBHPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8iLyI7cmV0dXJuIEc9PT0iLyI/YC8ke1h9YDpgJHtHfS8ke1h9YH1mdW5jdGlvbiBBOChYKXtyZXR1cm4gWD8uZXJyb3JzPy5pbmNsdWRlcyhZOCk/PyExfWZ1bmN0aW9uIHU0KFgpe2xldFtHLEpdPWsobnVsbCksW1kscV09aygiQVggb2ZmIik7cmV0dXJuIGooKCk9PntpZighWCl7SihudWxsKSxxKCJBWCBvZmYiKTtyZXR1cm59SihudWxsKSxxKCJBWCB3YWl0aW5nIik7bGV0IFo9bmV3IEV2ZW50U291cmNlKFgpO3JldHVybiBaLm9ubWVzc2FnZT0oXyk9Pnt0cnl7bGV0ICQ9SlNPTi5wYXJzZShfLmRhdGEpO0ooJCkscShBOCgkKT8iQVggdW5hdmFpbGFibGU6IGluc3RhbGwgQVhlIjpgJHskLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtxKCJBWCBwYXJzZSBlcnJvciIpfX0sWi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntxKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5aLmNsb3NlKCl9LFtYXSkse3NuYXBzaG90Okcsc3RhdHVzOll9fXZhciB3OD1GMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxUOD1GMChudWxsKTtmdW5jdGlvbiBfOSgpe3JldHVybiBFMCh3OCl9ZnVuY3Rpb24gazgoKXtsZXQgWD1FMChUOCk7aWYoIVgpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuIFh9ZnVuY3Rpb24gYzQoe2VuZHBvaW50OlgsY2hpbGRyZW46R30pe2xldHtzbmFwc2hvdDpKLHN0YXR1czpZfT11NChYKSxbcSxaXT1rKG51bGwpLFtfLCRdPWsobnVsbCk7aigoKT0+e2lmKCFYKVoobnVsbCksJChudWxsKX0sW1hdKTtsZXQgej15MCgoKT0+KHtzbmFwc2hvdDpKLHN0YXR1czpZfSksW0osWV0pLEw9eTAoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6cSxzZWxlY3RlZEtleTpfLHNldEhpZ2hsaWdodGVkS2V5Olosc2V0U2VsZWN0ZWRLZXk6JH0pLFtxLF9dKTtyZXR1cm4gUSh3OC5Qcm92aWRlcix7dmFsdWU6eixjaGlsZHJlbjpRKFQ4LlByb3ZpZGVyLHt2YWx1ZTpMLGNoaWxkcmVuOkd9KX0pfWFzeW5jIGZ1bmN0aW9uIHEwKFgpe3JldHVybihhd2FpdCBmZXRjaChROSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7Y29tbWFuZDpYfSl9KSkuanNvbigpfWZ1bmN0aW9uIGw0KFgpe3RyeXtsZXQgRz1KU09OLnBhcnNlKFgpLEo9W107Zm9yKGxldFtZLHFdb2YgT2JqZWN0LmVudHJpZXMoRy5kZXZpY2VzPz97fSkpe2xldCBaPVkucmVwbGFjZSgvXmNvbVwuYXBwbGVcLkNvcmVTaW11bGF0b3JcLlNpbVJ1bnRpbWVcLi8sIiIpLnJlcGxhY2UoLy0vZywiLiIpO2ZvcihsZXQgXyBvZiBxKWlmKF8uaXNBdmFpbGFibGUpSi5wdXNoKHt1ZGlkOl8udWRpZCxuYW1lOl8ubmFtZSxzdGF0ZTpfLnN0YXRlLHJ1bnRpbWU6Wn0pfXJldHVybiBKfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiBFMShYKXtsZXQgRz1YLnRvTG93ZXJDYXNlKCk7aWYoRy5pbmNsdWRlcygiaXBob25lIikpcmV0dXJuIDA7aWYoRy5pbmNsdWRlcygiaXBhZCIpKXJldHVybiAxO2lmKEcuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIDI7aWYoRy5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuIDM7cmV0dXJuIDR9ZnVuY3Rpb24gQzEoWCl7bGV0IEc9WC50b0xvd2VyQ2FzZSgpO2lmKEcuc3RhcnRzV2l0aCgiaW9zIikpcmV0dXJuIDA7aWYoRy5zdGFydHNXaXRoKCJpcGFkb3MiKSlyZXR1cm4gMTtpZihHLnN0YXJ0c1dpdGgoIndhdGNob3MiKSlyZXR1cm4gMjtpZihHLnN0YXJ0c1dpdGgoInZpc2lvbm9zIil8fEcuc3RhcnRzV2l0aCgieHJvcyIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIGE0KHtkZXZpY2VzOlgsc2VsZWN0ZWRVZGlkOkcsbG9hZGluZzpKLGVycm9yOlksc3RvcHBpbmdVZGlkczpxLG9uUmVmcmVzaDpaLG9uU2VsZWN0Ol8sb25TdG9wOiQsdHJpZ2dlcjp6fSl7bGV0W0wsQl09ayghMSksVj1iKG51bGwpO2ooKCk9PntpZighTClyZXR1cm47bGV0IFA9KEYpPT57aWYoIVYuY3VycmVudD8uY29udGFpbnMoRi50YXJnZXQpKUIoITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsUCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFApfSxbTF0pO2xldCBIPW5ldyBNYXA7Zm9yKGxldCBQIG9mIFgpe2lmKFAudWRpZD09PUcpY29udGludWU7bGV0IEY9SC5nZXQoUC5ydW50aW1lKTtpZighRilGPVtdLEguc2V0KFAucnVudGltZSxGKTtGLnB1c2goUCl9Zm9yKGxldCBQIG9mIEgudmFsdWVzKCkpUC5zb3J0KChGLEEpPT5FMShGLm5hbWUpLUUxKEEubmFtZSl8fEYubmFtZS5sb2NhbGVDb21wYXJlKEEubmFtZSkpO2xldCBPPVsuLi5ILmVudHJpZXMoKV0uc29ydCgoW1BdLFtGXSk9PkMxKFApLUMxKEYpfHxQLmxvY2FsZUNvbXBhcmUoRikpLFU9WC5maW5kKChQKT0+UC51ZGlkPT09Ryk/P251bGw7cmV0dXJuIFEoImRpdiIse3JlZjpWLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUifSxjaGlsZHJlbjpbUSgiZGl2Iix7b25DbGljazooKT0+e2lmKCFMKVooKTtCKChQKT0+IVApfSxjaGlsZHJlbjp6fSksTCYmUSgiZGl2Iix7c3R5bGU6RDYsY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOmI4LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwfSxjaGlsZHJlbjoiU2ltdWxhdG9ycyJ9KSxRKCJidXR0b24iLHtvbkNsaWNrOihQKT0+e1Auc3RvcFByb3BhZ2F0aW9uKCksWigpfSxkaXNhYmxlZDpKLHN0eWxlOmo4LGNoaWxkcmVuOko/Ii4uLiI6IlJlZnJlc2gifSldfSksWSYmUSgiZGl2Iix7c3R5bGU6WjksY2hpbGRyZW46WX0pLFUmJlEobCx7Y2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnsuLi5xOSxjb2xvcjoiI2E1YjRmYyJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6WTkoVS5zdGF0ZT09PSJCb290ZWQiPyIjNGFkZTgwIjoiIzQ0NCIpfSksUSgic3BhbiIse3N0eWxlOntmbGV4OjF9LGNoaWxkcmVuOlUubmFtZX0pXX0pLFEoImRpdiIse3N0eWxlOk82fSldfSksWC5sZW5ndGg9PT0wJiYhSiYmIVkmJlEoImRpdiIse3N0eWxlOlM4LGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxPLm1hcCgoW1AsRl0pPT5RKCJkaXYiLHtjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6djgsY2hpbGRyZW46UH0pLEYubWFwKChBKT0+e2xldCBJPXEuaGFzKEEudWRpZCkscz1BLnN0YXRlPT09IkJvb3RlZCI7cmV0dXJuIFEoImRpdiIse3N0eWxlOnE5LG9uTW91c2VFbnRlcjooaCk9PmguY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixvbk1vdXNlTGVhdmU6KGgpPT5oLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PntfKEEpLEIoITEpfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlk5KHM/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MX0sY2hpbGRyZW46QS5uYW1lfSkscyYmUSgic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooaCk9PntpZihoLnN0b3BQcm9wYWdhdGlvbigpLCFJKSQoQS51ZGlkKX0sc3R5bGU6e2ZvbnRTaXplOjEwLHBhZGRpbmc6IjFweCA2cHgiLGJvcmRlclJhZGl1czo0LGNvbG9yOkk/IiM4ODgiOiIjZjg3MTcxIixiYWNrZ3JvdW5kOkk/InRyYW5zcGFyZW50IjoicmdiYSgyNDgsMTEzLDExMywwLjEpIixjdXJzb3I6ST8iZGVmYXVsdCI6InBvaW50ZXIifSxjaGlsZHJlbjpJPyJTdG9wcGluZy4uLiI6IlN0b3AifSldfSxBLnVkaWQpfSldfSxQKSldfSldfSl9ZnVuY3Rpb24gWTkoWCl7cmV0dXJue3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6WCxmbGV4U2hyaW5rOjB9fXZhciBpND1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxNOD0yNjIxNDQsbzQ9NTI0Mjg4MDAwO2Z1bmN0aW9uIHI0KFgpe2lmKCQ5KFgpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoaTQuaGFzKFgudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzNChYKXtsZXQgRz1uZXcgVWludDhBcnJheShYKSxKPSIiO2ZvcihsZXQgWT0wO1k8Ry5sZW5ndGg7WSsrKUorPVN0cmluZy5mcm9tQ2hhckNvZGUoR1tZXSk7cmV0dXJuIGJ0b2EoSil9ZnVuY3Rpb24gJDkoWCl7bGV0IEc9WC5uYW1lLEo9Ry5sYXN0SW5kZXhPZigiLiIpO2lmKEo+PTApcmV0dXJuIEcuc2xpY2UoSisxKS50b0xvd2VyQ2FzZSgpO2lmKFgudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1hc3luYyBmdW5jdGlvbiB0NChYLEcsSixZKXtpZihYLnNpemU+bzQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IHE9Rz09PSJpcGEiPyJpcGEiOiQ5KFgpLF89YC90bXAvJHtHPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtxfWA7dHJ5e2xldCAkPWF3YWl0IFguYXJyYXlCdWZmZXIoKSx6PXM0KCQpO2ZvcihsZXQgVj0wO1Y8ei5sZW5ndGg7Vis9TTgpe2xldCBIPXouc2xpY2UoVixWK004KSxVPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtIfSB8IGJhc2U2NCAtZCAke1Y9PT0wPyI+IjoiPj4ifSAke199J2ApO2lmKFUuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFUuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7VS5leGl0Q29kZX0pYCl9bGV0IEw9Rz09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke1l9ICR7X31gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtZfSAke199YCxCPWF3YWl0IEooTCk7aWYoQi5leGl0Q29kZSE9PTApe2xldCBWPUc9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihCLnN0ZGVycnx8YCR7Vn0gZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9fWZpbmFsbHl7SihgYmFzaCAtYyAncm0gLWYgJHtffSdgKS5jYXRjaCgoKT0+e30pfX1mdW5jdGlvbiBuNCgpe2xldFtYLEddPWsoW10pLEo9UigocSxaKT0+e2xldCBfPWNyeXB0by5yYW5kb21VVUlEKCk7cmV0dXJuIEcoKCQpPT5bLi4uJCx7aWQ6XyxuYW1lOnEsa2luZDpaLHN0YXR1czoidXBsb2FkaW5nIn1dKSxffSxbXSksWT1SKChxLFopPT57aWYoRygoXyk9Pl8ubWFwKCgkKT0+JC5pZD09PXE/ey4uLiQsLi4uWn06JCkpLFouc3RhdHVzPT09InN1Y2Nlc3MifHxaLnN0YXR1cz09PSJlcnJvciIpc2V0VGltZW91dCgoKT0+e0coKF8pPT5fLmZpbHRlcigoJCk9PiQuaWQhPT1xKSl9LDMwMDApfSxbXSk7cmV0dXJue3RvYXN0czpYLGFkZDpKLHVwZGF0ZTpZfX1mdW5jdGlvbiBlNCh7ZXhlYzpYLHVkaWQ6RyxlbmFibGVkOkosb25VcGxvYWRTdGFydDpZLG9uVXBsb2FkRW5kOnEsb25VbnN1cHBvcnRlZDpafSl7bGV0W18sJF09ayghMSksej1iKDApLEw9Uihhc3luYyhPKT0+e2lmKE8ucHJldmVudERlZmF1bHQoKSxPLnN0b3BQcm9wYWdhdGlvbigpLHouY3VycmVudD0wLCQoITEpLCFKfHwhRylyZXR1cm47bGV0IFU9QXJyYXkuZnJvbShPLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoVS5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IFAgb2YgVSl7bGV0IEY9cjQoUCk7aWYoIUYpe1ooUCk7Y29udGludWV9bGV0IEE9WShQLm5hbWUsRik7dDQoUCxGLFgsRykudGhlbigoKT0+cShBLCEwKSkuY2F0Y2goKEkpPT5xKEEsITEsSSBpbnN0YW5jZW9mIEVycm9yP0kubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtKLEcsWCxZLHEsWl0pLEI9UigoTyk9PntpZihPLnByZXZlbnREZWZhdWx0KCksSilPLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0pdKSxWPVIoKE8pPT57aWYoTy5wcmV2ZW50RGVmYXVsdCgpLCFKKXJldHVybjtpZih6LmN1cnJlbnQrKyx6LmN1cnJlbnQ9PT0xKSQoITApfSxbSl0pLEg9UigoTyk9PntpZihPLnByZXZlbnREZWZhdWx0KCksei5jdXJyZW50LS0sei5jdXJyZW50PD0wKXouY3VycmVudD0wLCQoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Xyxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkIsb25EcmFnRW50ZXI6VixvbkRyYWdMZWF2ZTpILG9uRHJvcDpMfX19ZnVuY3Rpb24gTjAoWCl7cmV0dXJuYCcke1gucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIFg2KFgsRyxKKXtsZXQgWT1hd2FpdCBYKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtHfSAke04wKEopfSBhcHBgKTtpZihZLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WS5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgcT1ZLnN0ZG91dC50cmltKCk7aWYoIXEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBaPWF3YWl0IFgoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtOMChxKyIvSW5mby5wbGlzdCIpfWApLF89e307aWYoWi5leGl0Q29kZT09PTApdHJ5e189SlNPTi5wYXJzZShaLnN0ZG91dCl9Y2F0Y2h7fWxldCAkLEw9KF8/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P18/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Xz8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoTCYmTC5sZW5ndGg+MCkkPUxbTC5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgXz8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKSQ9Xy5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYoJCl7bGV0IFY9W2AkeyR9QDN4LnBuZ2AsYCR7JH1AMngucG5nYCxgJHskfS5wbmdgLGAkeyR9NjB4NjBAM3gucG5nYCxgJHskfTYweDYwQDJ4LnBuZ2BdLE89KGF3YWl0IFgoYGJhc2ggLWMgJHtOMChWLm1hcCgoVSk9PmBbIC1mICR7TjAocSsiLyIrVSl9IF0gJiYgZWNobyAke04wKHErIi8iK1UpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKE8pe2xldCBVPWF3YWl0IFgoYGJhc2U2NCAtaSAke04wKE8pfWApO2lmKFUuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke1Uuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpxLGRpc3BsYXlOYW1lOl8uQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Xy5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOl8uQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpfLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpfLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpfLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX1mdW5jdGlvbiBHNih7dWRpZDpYLGN1cnJlbnRBcHA6R30pe2xldFtKLFldPWsobnVsbCk7aWYoaigoKT0+e2lmKCFHKXtZKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWSh7YnVuZGxlSWQ6Ry5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkcuaXNSZWFjdE5hdGl2ZSxwaWQ6Ry5waWQsbG9hZGluZzohMH0pLFg2KHEwLFgsRy5idW5kbGVJZCkudGhlbigoWik9PntpZihxKXJldHVybjtZKHtidW5kbGVJZDpHLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Ry5pc1JlYWN0TmF0aXZlLHBpZDpHLnBpZCxsb2FkaW5nOiExLC4uLlp9KX0pLCgpPT57cT0hMH19LFtYLEc/LmJ1bmRsZUlkLEc/LnBpZCxHPy5pc1JlYWN0TmF0aXZlXSksIUopcmV0dXJuIFEoImRpdiIse3N0eWxlOkMuZW1wdHksY2hpbGRyZW46IldhaXRpbmcgZm9yIGFuIGFwcCB0byBjb21lIHRvIHRoZSBmb3JlZ3JvdW5k4oCmIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTpDLnNlY3Rpb24sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOkMuYXBwSGVhZGVyLGNoaWxkcmVuOltKLmljb25EYXRhVXJsP1EoImltZyIse3NyYzpKLmljb25EYXRhVXJsLHN0eWxlOkMuYXBwSWNvbixhbHQ6IiJ9KTpRKCJkaXYiLHtzdHlsZTp7Li4uQy5hcHBJY29uLGJhY2tncm91bmQ6IiMyYTJhMmMifX0pLFEoImRpdiIse3N0eWxlOnttaW5XaWR0aDowLGZsZXg6MX0sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOkMuYXBwTmFtZSxjaGlsZHJlbjpbSi5kaXNwbGF5TmFtZT8/Si5idW5kbGVJZCxKLmxvYWRpbmcmJlEoInNwYW4iLHtzdHlsZTpDLnNwaW5uZXIsY2hpbGRyZW46IiDigKYifSldfSksUSgiZGl2Iix7c3R5bGU6Qy5hcHBCdW5kbGUsdGl0bGU6Si5idW5kbGVJZCxjaGlsZHJlbjpKLmJ1bmRsZUlkfSldfSldfSksSi5lcnJvciYmUSgiZGl2Iix7c3R5bGU6Qy5lcnJvcixjaGlsZHJlbjpKLmVycm9yfSksUSgiZGwiLHtzdHlsZTpDLmRsLGNoaWxkcmVuOltRKHUwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Si5zaG9ydFZlcnNpb24/YCR7Si5zaG9ydFZlcnNpb259ICgke0ouYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Si5sb2FkaW5nPyLigKYiOiLigJQifSksUSh1MCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOkoubWluT1M/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksUSh1MCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOkouZXhlY3V0YWJsZT8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxRKHUwLHtsYWJlbDoiUElEIix2YWx1ZTpKLnBpZCE9bnVsbD9TdHJpbmcoSi5waWQpOiLigJQifSksSi5pc1JlYWN0TmF0aXZlJiZRKHUwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFEodTAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Si5hcHBQYXRoPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpKLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57cTAoYG9wZW4gLVIgJHtOMChKLmFwcFBhdGgpfWApfSxpY29uOlEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLFEoInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIHUwKHtsYWJlbDpYLHZhbHVlOkcsbW9ubzpKLGFjdGlvbjpZfSl7bGV0W3EsWl09ayghMSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOkMucm93LG9uTW91c2VFbnRlcjooKT0+WighMCksb25Nb3VzZUxlYXZlOigpPT5aKCExKSxjaGlsZHJlbjpbUSgiZHQiLHtzdHlsZTpDLmR0LGNoaWxkcmVuOlh9KSxRKCJkZCIse3N0eWxlOnsuLi5DLmRkLGZvbnRGYW1pbHk6Sj8idWktbW9ub3NwYWNlLCBtb25vc3BhY2UiOnZvaWQgMCxmb250U2l6ZTpKPzExOjEyLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LHRpdGxlOkcsY2hpbGRyZW46W0csWSYmUSgiZGl2Iix7c3R5bGU6ey4uLkMucm93QWN0aW9uV3JhcCxvcGFjaXR5OnE/MTowLHRyYW5zZm9ybTpxPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWCg0cHgpIixwb2ludGVyRXZlbnRzOnE/ImF1dG8iOiJub25lIn0sY2hpbGRyZW46USgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlkub25DbGljayx0aXRsZTpZLnRpdGxlLCJhcmlhLWxhYmVsIjpZLnRpdGxlLHN0eWxlOkMucm93QWN0aW9uLGNoaWxkcmVuOlkuaWNvbn0pfSldfSldfSl9dmFyIEo2PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIFk2KHt1ZGlkOlgsYnVuZGxlSWQ6R30pe2xldFtKLFldPWsoe30pLFtxLFpdPWsobnVsbCksW18sJF09ayhudWxsKSxbeixMXT1rKCExKTtqKCgpPT57WSh7fSksJChudWxsKX0sW0ddKTtsZXQgQj1SKGFzeW5jKEgsTyk9PntpZighRylyZXR1cm47bGV0IFU9YCR7SH06JHtPfWA7WihVKSwkKG51bGwpO3RyeXtsZXQgUD1hd2FpdCBxMChgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtYfSAke099ICR7SH0gJHtOMChHKX1gKTtpZihQLmV4aXRDb2RlIT09MCl7JChQLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtQLmV4aXRDb2RlfSlgKTtyZXR1cm59WSgoRik9Pih7Li4uRixbSF06Tz09PSJyZXNldCI/dm9pZCAwOk99KSl9ZmluYWxseXtaKG51bGwpfX0sW1gsR10pLFY9Uihhc3luYygpPT57aWYoIUcpcmV0dXJuO1ooIl9fYWxsX18iKSwkKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBxMChgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtYfSByZXNldCBhbGwgJHtOMChHKX1gKTtpZihILmV4aXRDb2RlIT09MCl7JChILnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtILmV4aXRDb2RlfSlgKTtyZXR1cm59WSh7fSl9ZmluYWxseXtaKG51bGwpfX0sW1gsR10pO2lmKCFHKXJldHVybiBRKCJkaXYiLHtzdHlsZTpDLmVtcHR5LGNoaWxkcmVuOiJQZXJtaXNzaW9ucyBhcHBlYXIgb25jZSBhbiBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQuIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTp7Li4uQy5zZWN0aW9uLHBhZGRpbmc6IjhweCAxMnB4In0sY2hpbGRyZW46W1EoImJ1dHRvbiIse29uQ2xpY2s6KCk9PkwoKEgpPT4hSCksc3R5bGU6Qy5wZXJtc1RvZ2dsZSwiYXJpYS1leHBhbmRlZCI6eixjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi5DLnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e3RyYW5zZm9ybTp6PyJyb3RhdGUoOTBkZWcpIjoicm90YXRlKDBkZWcpIix0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xNXMiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjkgMTggMTUgMTIgOSA2In0pfSldfSkseiYmXyYmUSgiZGl2Iix7c3R5bGU6ey4uLkMuZXJyb3IsbWFyZ2luVG9wOjh9LGNoaWxkcmVuOl99KSx6JiZRKCJkaXYiLHtzdHlsZTpDLnBlcm1zU2Nyb2xsV3JhcCxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6Qy5wZXJtc1Njcm9sbCxjaGlsZHJlbjpKNi5tYXAoKHtrZXk6SCxsYWJlbDpPfSk9PntsZXQgVT1KW0hdO3JldHVybiBRKCJkaXYiLHtzdHlsZTpDLnBlcm1Sb3csY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTpDLnBlcm1MYWJlbCxjaGlsZHJlbjpPfSksUSgiZGl2Iix7c3R5bGU6Qy5wZXJtU2VnLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6TyxjaGlsZHJlbjpbUShKOSx7YWN0aXZlOlU9PT0iZ3JhbnQiLHBlbmRpbmc6cT09PWAke0h9OmdyYW50YCxvbkNsaWNrOigpPT5CKEgsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjUgMTIgMTAgMTcgMTkgNyJ9KX0pfSksUShKOSx7YWN0aXZlOlU9PT0icmV2b2tlIixwZW5kaW5nOnE9PT1gJHtIfTpyZXZva2VgLG9uQ2xpY2s6KCk9PkIoSCwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pXX0pfSksUShKOSx7YWN0aXZlOiExLHBlbmRpbmc6cT09PWAke0h9OnJlc2V0YCxvbkNsaWNrOigpPT5CKEgsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi40IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCAzLjUtNy4xIn0pLFEoInBvbHlsaW5lIix7cG9pbnRzOiIzIDMgMyA5IDkgOSJ9KV19KX0pXX0pXX0sSCl9KX0pLFEoImRpdiIse3N0eWxlOkMucGVybXNGYWRlVG9wfSksUSgiZGl2Iix7c3R5bGU6Qy5wZXJtc0ZhZGVCb3R0b219KV19KSx6JiZRKCJkaXYiLHtzdHlsZTpDLnBlcm1zRm9vdGVyLGNoaWxkcmVuOlEoImJ1dHRvbiIse29uQ2xpY2s6VixkaXNhYmxlZDpxPT09Il9fYWxsX18iLHN0eWxlOkMucmVzZXRBbGxCdG4sdGl0bGU6InhjcnVuIHNpbWN0bCBwcml2YWN5IHJlc2V0IGFsbCIsY2hpbGRyZW46cT09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gWjYoe2RldmljZXM6WCxsb2FkaW5nOkcsZXJyb3I6SixvblJlZnJlc2g6WX0pe2xldFtxLFpdPWsobnVsbCksW18sJF09ayhudWxsKSx6PVIoYXN5bmMoVik9PntpZihxKXJldHVybjtaKFYudWRpZCksJChudWxsKTt0cnl7aWYoVi5zdGF0ZSE9PSJCb290ZWQiKXtsZXQgUD1hd2FpdCBxMChgeGNydW4gc2ltY3RsIGJvb3QgJHtWLnVkaWR9YCk7aWYoUC5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoUC5zdGRlcnJ8fCJGYWlsZWQgdG8gYm9vdCBzaW11bGF0b3IiKX1sZXQgSD1hd2FpdCBxMChgYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2ggJHtWLnVkaWR9YCk7aWYoSC5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoSC5zdGRlcnJ8fCJGYWlsZWQgdG8gc3RhcnQgc2VydmUtc2ltIik7bGV0IE89RGF0ZS5ub3coKSsxNTAwMCxVPWAke1E5KCJhcGkiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFYudWRpZCl9YDt3aGlsZShEYXRlLm5vdygpPE8pe3RyeXtsZXQgUD1hd2FpdCBmZXRjaChVLHtjYWNoZToibm8tc3RvcmUifSk7aWYoUC5vayYmYXdhaXQgUC5qc29uKCkpe2xldCBGPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO0Yuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixWLnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oRi50b1N0cmluZygpKTtyZXR1cm59fWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoUCk9PnNldFRpbWVvdXQoUCw0MDApKX10aHJvdyBFcnJvcigic2VydmUtc2ltIHN0YXJ0ZWQgYnV0IG5vIHN0cmVhbSBzdGF0ZSBhcHBlYXJlZCIpfWNhdGNoKEgpeyQoSCBpbnN0YW5jZW9mIEVycm9yP0gubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbSIpLFoobnVsbCl9fSxbcV0pLEw9bmV3IE1hcDtmb3IobGV0IFYgb2YgWCl7bGV0IEg9TC5nZXQoVi5ydW50aW1lKTtpZighSClIPVtdLEwuc2V0KFYucnVudGltZSxIKTtILnB1c2goVil9Zm9yKGxldCBWIG9mIEwudmFsdWVzKCkpVi5zb3J0KChILE8pPT57bGV0IFU9SC5zdGF0ZT09PSJCb290ZWQiPzA6MSxQPU8uc3RhdGU9PT0iQm9vdGVkIj8wOjE7aWYoVSE9PVApcmV0dXJuIFUtUDtyZXR1cm4gRTEoSC5uYW1lKS1FMShPLm5hbWUpfHxILm5hbWUubG9jYWxlQ29tcGFyZShPLm5hbWUpfSk7bGV0IEI9Wy4uLkwuZW50cmllcygpXS5zb3J0KChbVl0sW0hdKT0+QzEoViktQzEoSCl8fFYubG9jYWxlQ29tcGFyZShIKSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOlowLnBhZ2UsY2hpbGRyZW46USgiZGl2Iix7c3R5bGU6WjAuZW1wdHksY2hpbGRyZW46W1EoImgxIix7c3R5bGU6WjAuZW1wdHlUaXRsZSxjaGlsZHJlbjoiTm8gc2VydmUtc2ltIHN0cmVhbSBydW5uaW5nIn0pLFEoInAiLHtzdHlsZTpaMC5lbXB0eUhpbnQsY2hpbGRyZW46WyJQaWNrIGEgc2ltdWxhdG9yIHRvIGJvb3QsIG9yIHN0YXJ0IG9uZSB5b3Vyc2VsZiB3aXRoIiwiICIsUSgiY29kZSIse3N0eWxlOlowLmNvZGUsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KSxRKCJkaXYiLHtzdHlsZTpLNixjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6YjgsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9LGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFEoImJ1dHRvbiIse29uQ2xpY2s6WSxkaXNhYmxlZDpHLHN0eWxlOmo4LGNoaWxkcmVuOkc/Ii4uLiI6IlJlZnJlc2gifSldfSksSiYmUSgiZGl2Iix7c3R5bGU6WjksY2hpbGRyZW46Sn0pLF8mJlEoImRpdiIse3N0eWxlOlo5LGNoaWxkcmVuOl99KSwhRyYmIUomJlgubGVuZ3RoPT09MCYmUSgiZGl2Iix7c3R5bGU6UzgsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLEIubWFwKChbVixIXSk9PlEoImRpdiIse2NoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTp2OCxjaGlsZHJlbjpWfSksSC5tYXAoKE8pPT57bGV0IFU9cT09PU8udWRpZCxQPXEhPT1udWxsJiYhVSxGPU8uc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLnE5LGN1cnNvcjpQPyJkZWZhdWx0IjoicG9pbnRlciIsb3BhY2l0eTpQPzAuNToxfSxvbk1vdXNlRW50ZXI6KEEpPT57aWYoIVApQS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkifSxvbk1vdXNlTGVhdmU6KEEpPT5BLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PntpZighUCl6KE8pfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlk5KEY/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MSx0ZXh0QWxpZ246ImxlZnQifSxjaGlsZHJlbjpPLm5hbWV9KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOlU/IiNhNWI0ZmMiOiIjODg4In0sY2hpbGRyZW46VT9GPyJTdGFydGluZy4uLiI6IkJvb3RpbmcuLi4iOkY/IlN0YXJ0IHN0cmVhbSI6IkJvb3QgJiBzdHJlYW0ifSldfSxPLnVkaWQpfSldfSxWKSldfSldfSl9KX1mdW5jdGlvbiBKOSh7YWN0aXZlOlgscGVuZGluZzpHLG9uQ2xpY2s6Six2YXJpYW50OlksdGl0bGU6cSxjaGlsZHJlbjpafSl7bGV0IF89WT09PSJncmFudCI/IiM0YWRlODAiOlk9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBRKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6Ryx0aXRsZTpxLCJhcmlhLWxhYmVsIjpxLHN0eWxlOnsuLi5DLnBlcm1CdG4sYmFja2dyb3VuZDpYP2Ake199MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6WD9fOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Okc/MC41OjF9LGNoaWxkcmVuOlp9KX1mdW5jdGlvbiBFOChYLEcpe2lmKFg9PT1HKXJldHVybiEwO2lmKFguaWQhPT1HLmlkfHxYLnBhdGghPT1HLnBhdGh8fFgubGFiZWwhPT1HLmxhYmVsfHxYLnZhbHVlIT09Ry52YWx1ZXx8WC5yb2xlIT09Ry5yb2xlfHxYLnR5cGUhPT1HLnR5cGV8fFguZW5hYmxlZCE9PUcuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj1YLmZyYW1lLFk9Ry5mcmFtZTtyZXR1cm4gSj09PVl8fEoueD09PVkueCYmSi55PT09WS55JiZKLndpZHRoPT09WS53aWR0aCYmSi5oZWlnaHQ9PT1ZLmhlaWdodH12YXIgcTY9bjEoZnVuY3Rpb24oe2VsZW1lbnQ6RyxpbmRleDpKLHNjcmVlbjpZLGhpZ2hsaWdodGVkOnEsc2VsZWN0ZWQ6WixvbkhpZ2hsaWdodDpfLG9uU2VsZWN0OiR9KXtsZXQgej1SMShHKSxMPUM4KEcsSiksQj1WNihHLmZyYW1lLFkpO2lmKCFCKXJldHVybiBudWxsO2xldCBWPUw2KEwpO3JldHVybiBRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6eiwiZGF0YS1heC1pZCI6TC5pZCwiZGF0YS1heC1wYXRoIjpMLnBhdGgsImRhdGEtYXgtbGFiZWwiOkwubGFiZWwsImRhdGEtYXgtdmFsdWUiOkwudmFsdWUsImRhdGEtYXgtcm9sZSI6TC5yb2xlLCJkYXRhLWF4LXR5cGUiOkwudHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoTC5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6UjgoTC5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhaKSwiYXJpYS1sYWJlbCI6Ry5sYWJlbHx8Vix0aXRsZTpWLG9uQ2xpY2s6KCk9PiQoeiksb25Nb3VzZUVudGVyOigpPT5fKHopLG9uTW91c2VMZWF2ZTooKT0+XyhudWxsKSxzdHlsZTp7Li4uUTAudGFyZ2V0LGxlZnQ6YCR7Qi54L1kud2lkdGgqMTAwfSVgLHRvcDpgJHtCLnkvWS5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke0Iud2lkdGgvWS53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke0IuaGVpZ2h0L1kuaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpaPyIjNjBhNWZhIjpxPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpaPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOnE/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LChYLEcpPT5YLmluZGV4PT09Ry5pbmRleCYmWC5oaWdobGlnaHRlZD09PUcuaGlnaGxpZ2h0ZWQmJlguc2VsZWN0ZWQ9PT1HLnNlbGVjdGVkJiZYLm9uSGlnaGxpZ2h0PT09Ry5vbkhpZ2hsaWdodCYmWC5vblNlbGVjdD09PUcub25TZWxlY3QmJlguc2NyZWVuLndpZHRoPT09Ry5zY3JlZW4ud2lkdGgmJlguc2NyZWVuLmhlaWdodD09PUcuc2NyZWVuLmhlaWdodCYmRTgoWC5lbGVtZW50LEcuZWxlbWVudCkpO2Z1bmN0aW9uIFE2KCl7bGV0e3NuYXBzaG90Olh9PV85KCkse2hpZ2hsaWdodGVkS2V5Okcsc2VsZWN0ZWRLZXk6SixzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5OnF9PWs4KCk7aWYoIVg/LnNjcmVlbi53aWR0aHx8IVg/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIFEoImRpdiIse3N0eWxlOlEwLnRhcmdldHMsY2hpbGRyZW46WC5lbGVtZW50cy5tYXAoKFosXyk9PntsZXQgJD1SMShaKTtyZXR1cm4gUShxNix7ZWxlbWVudDpaLGluZGV4Ol8sc2NyZWVuOlguc2NyZWVuLGhpZ2hsaWdodGVkOiQ9PT1HLHNlbGVjdGVkOiQ9PT1KLG9uSGlnaGxpZ2h0Olksb25TZWxlY3Q6cX0sJCl9KX0pfXZhciBfNj1uMShmdW5jdGlvbih7ZWxlbWVudDpHLGluZGV4OkosYWN0aXZlOlksb25IaWdobGlnaHQ6cX0pe2xldCBaPVIxKEcpLF89QzgoRyxKKSwkPWAke01hdGgucm91bmQoRy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChHLmZyYW1lLmhlaWdodCl9YCx6PVtfLmxhYmVsLF8ucm9sZXx8Xy50eXBlfHwiZWxlbWVudCIsJF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gUSgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpaLHRpdGxlOnosb25Nb3VzZUVudGVyOigpPT5xKFopLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxvbkZvY3VzOigpPT5xKFopLG9uQmx1cjooKT0+cShudWxsKSxzdHlsZTp7Li4uUTAubGlzdEl0ZW0sLi4uWT9RMC5saXN0SXRlbUFjdGl2ZTp7fX0sY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTpRMC5pdGVtVGV4dCxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlEwLml0ZW1MYWJlbCxjaGlsZHJlbjpHLmxhYmVsfHxHLnJvbGV8fCJVbmxhYmVsZWQifSksUSgic3BhbiIse3N0eWxlOlEwLml0ZW1NZXRhLGNoaWxkcmVuOkcucm9sZXx8Ry50eXBlfHwiZWxlbWVudCJ9KV19KSxRKCJjb2RlIix7c3R5bGU6UTAuaXRlbVNpemUsY2hpbGRyZW46JH0pXX0pfSwoWCxHKT0+WC5pbmRleD09PUcuaW5kZXgmJlguYWN0aXZlPT09Ry5hY3RpdmUmJlgub25IaWdobGlnaHQ9PT1HLm9uSGlnaGxpZ2h0JiZFOChYLmVsZW1lbnQsRy5lbGVtZW50KSk7ZnVuY3Rpb24gJDYoe292ZXJsYXlFbmFibGVkOlgsb25Ub2dnbGVPdmVybGF5Okd9KXtsZXR7c25hcHNob3Q6Sn09XzkoKSx7aGlnaGxpZ2h0ZWRLZXk6WSxzZXRIaWdobGlnaHRlZEtleTpxfT1rOCgpLFo9Sj8uZWxlbWVudHM/P1tdLF89QTgoSiksJD1KPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLkMuc2VjdGlvbixwYWRkaW5nOiI4cHggMTJweCJ9LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTpRMC5wYW5lbEhlYWRlcixjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi5DLnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IkFYIFRyZWUifSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsImFyaWEtcHJlc3NlZCI6WCxzdHlsZTpRMC5vdmVybGF5VG9nZ2xlLGNoaWxkcmVuOlg/Ik92ZXJsYXkgb24iOiJFbmFibGUgb3ZlcmxheSJ9KV19KSwhWD9udWxsOl8/USgiZGl2Iix7c3R5bGU6ey4uLkMuZW1wdHkscGFkZGluZzoxMn0sY2hpbGRyZW46WyJBWCB1bmF2YWlsYWJsZToiLCIgIixRKCJhIix7aHJlZjpKOCxzdHlsZTpRMC5lbXB0eUxpbmssY2hpbGRyZW46Imluc3RhbGwgQVhlIn0pXX0pOloubGVuZ3RoPT09MD9RKCJkaXYiLHtzdHlsZTp7Li4uQy5lbXB0eSxwYWRkaW5nOjEyfSxjaGlsZHJlbjokPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlEoImRpdiIse3N0eWxlOlEwLmxpc3Qscm9sZToibGlzdCIsY2hpbGRyZW46Wi5tYXAoKHosTCk9PntsZXQgQj1SMSh6KTtyZXR1cm4gUShfNix7ZWxlbWVudDp6LGluZGV4OkwsYWN0aXZlOkI9PT1ZLG9uSGlnaGxpZ2h0OnF9LEIpfSl9KV19KX1mdW5jdGlvbiBDOChYLEcpe2xldCBKPVgubGFiZWx8fFgucm9sZXx8YGVsZW1lbnQgJHtHKzF9YCxZPVgucm9sZXx8WC50eXBlO3JldHVybntpZDpYLmlkLHBhdGg6WC5wYXRoLGxhYmVsOkosdmFsdWU6WC52YWx1ZSxyb2xlOlksdHlwZTpYLnR5cGUsZW5hYmxlZDpYLmVuYWJsZWQsZnJhbWU6WC5mcmFtZX19ZnVuY3Rpb24gVjYoWCxHKXtsZXQgSj1NYXRoLm1heCgwLFgueCksWT1NYXRoLm1heCgwLFgueSkscT1NYXRoLm1pbihHLndpZHRoLFgueCtYLndpZHRoKSxaPU1hdGgubWluKEcuaGVpZ2h0LFgueStYLmhlaWdodCksXz1NYXRoLm1heCgwLHEtSiksJD1NYXRoLm1heCgwLFotWSk7cmV0dXJuIF8+MCYmJD4wP3t4OkoseTpZLHdpZHRoOl8saGVpZ2h0OiR9Om51bGx9ZnVuY3Rpb24gUjEoWCl7cmV0dXJuIFguaWR9ZnVuY3Rpb24gTDYoWCl7cmV0dXJuW2BBWCBsYWJlbDogJHtYLmxhYmVsfHwiVW5sYWJlbGVkIn1gLFgucm9sZT9gcm9sZTogJHtYLnJvbGV9YDoiIixYLnR5cGU/YHR5cGU6ICR7WC50eXBlfWA6IiIsWC52YWx1ZT9gdmFsdWU6ICR7WC52YWx1ZX1gOiIiLFguaWQ/YGlkOiAke1guaWR9YDoiIixgcGF0aDogJHtYLnBhdGh9YCxgZnJhbWU6ICR7UjgoWC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gUjgoWCl7cmV0dXJuYCR7WC54fSwke1gueX0gJHtYLndpZHRofXgke1guaGVpZ2h0fWB9ZnVuY3Rpb24gejYoe292ZXJsYXlFbmFibGVkOlgsc3RyZWFtaW5nOkcsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOll9PV85KCksW3EsWl09ayghMSk7cmV0dXJuIFEoSjAuQnV0dG9uLHsiYXJpYS1sYWJlbCI6WD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6WCx0aXRsZTpZLG9uQ2xpY2s6Sixvbk1vdXNlRW50ZXI6KCk9PlooITApLG9uTW91c2VMZWF2ZTooKT0+WighMSksc3R5bGU6WCYmRz97Li4uUTAudG9vbGJhckJ1dHRvbkFjdGl2ZSwuLi5xP1EwLnRvb2xiYXJCdXR0b25BY3RpdmVIb3Zlcjp7fX06dm9pZCAwLGNoaWxkcmVuOlEoInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTMgOFY1YTIgMiAwIDAgMSAyLTJoMyJ9KSxRKCJwYXRoIix7ZDoiTTE2IDNoM2EyIDIgMCAwIDEgMiAydjMifSksUSgicGF0aCIse2Q6Ik0yMSAxNnYzYTIgMiAwIDAgMS0yIDJoLTMifSksUSgicGF0aCIse2Q6Ik04IDIxSDVhMiAyIDAgMCAxLTItMnYtMyJ9KSxRKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMy41In0pXX0pfSl9ZnVuY3Rpb24gVzYoe29wZW46WCxvbkNsb3NlOkcsdWRpZDpKLGN1cnJlbnRBcHA6WSxheE92ZXJsYXlFbmFibGVkOnEsb25Ub2dnbGVBeE92ZXJsYXk6Wn0pe3JldHVybiBRKCJhc2lkZSIse3N0eWxlOnsuLi5DLnBhbmVsLHRyYW5zZm9ybTpYPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6WD8xOjAscG9pbnRlckV2ZW50czpYPyJhdXRvIjoibm9uZSJ9LCJhcmlhLWhpZGRlbiI6IVgsY2hpbGRyZW46W1EoImhlYWRlciIse3N0eWxlOkMuaGVhZGVyLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6Qy5oZWFkZXJUaXRsZSxjaGlsZHJlbjoiVG9vbHMifSksUSgiYnV0dG9uIix7b25DbGljazpHLHN0eWxlOkMuY2xvc2VCdG4sImFyaWEtbGFiZWwiOiJDbG9zZSBwYW5lbCIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE2Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSldfSksWCYmUSgiZGl2Iix7c3R5bGU6Qy5ib2R5LGNoaWxkcmVuOltRKCQ2LHtvdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlT3ZlcmxheTpafSksUShHNix7dWRpZDpKLGN1cnJlbnRBcHA6WX0pLFEoWTYse3VkaWQ6SixidW5kbGVJZDpZPy5idW5kbGVJZD8/bnVsbH0pXX0pXX0pfXZhciBLNj17d2lkdGg6IjEwMCUiLG1heFdpZHRoOjM2MCxtYXJnaW5Ub3A6OCxiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzo0LGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250U2l6ZToxMyxjb2xvcjoiI2VlZSIsdGV4dEFsaWduOiJsZWZ0IixtYXhIZWlnaHQ6IjcwdmgiLG92ZXJmbG93WToiYXV0byIsbWluSGVpZ2h0OjB9O2Z1bmN0aW9uIEg2KCl7bGV0IFg9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxbRyxKXT1rKCExKSxbWSxxXT1rKFtdKSxbWixfXT1rKCExKSxbJCx6XT1rKG51bGwpLFtMLEJdPWsobmV3IFNldCksW1YsSF09ayghMSksW08sVV09ayghMSksUD1SKGFzeW5jKCk9PntfKCEwKSx6KG51bGwpO3RyeXtsZXQgSz1hd2FpdCBxMCgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihLLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihLLnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO3EobDQoSy5zdGRvdXQpKX1jYXRjaChLKXt6KEsgaW5zdGFuY2VvZiBFcnJvcj9LLm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e18oITEpfX0sW10pO2lmKGooKCk9PntQKCl9LFtQXSksaigoKT0+e2lmKCFYPy5sb2dzRW5kcG9pbnQpcmV0dXJuO2xldCBLPW5ldyBFdmVudFNvdXJjZShYLmxvZ3NFbmRwb2ludCksVD1uZXcgTWFwLFM9WyIjOGJlOWZkIiwiIzUwZmE3YiIsIiNmZmI4NmMiLCIjZmY3OWM2IiwiI2JkOTNmOSIsIiNmMWZhOGMiLCIjNjI3MmE0IiwiI2ZmNTU1NSIsIiM2OWZmOTQiLCIjZDZhY2ZmIiwiI2ZmZmZhNSIsIiNhNGZmZmYiLCIjZmY2ZTZlIiwiI2NhYTlmYSIsIiM1YWY3OGUiXTtmdW5jdGlvbiB2KFcwKXtsZXQgcD1ULmdldChXMCk7aWYoIXApe2xldCBnPTA7Zm9yKGxldCBZMD0wO1kwPFcwLmxlbmd0aDtZMCsrKWc9KGc8PDUpLWcrVzAuY2hhckNvZGVBdChZMCl8MDtwPVNbTWF0aC5hYnMoZyklUy5sZW5ndGhdLFQuc2V0KFcwLHApfXJldHVybiBwfWxldCB1PSIiLGk9ITE7cmV0dXJuIEsub25tZXNzYWdlPShXMCk9Pnt0cnl7bGV0IHA9SlNPTi5wYXJzZShXMC5kYXRhKSxnPXAucHJvY2Vzc0ltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/cC5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLFkwPXAuc3Vic3lzdGVtPz8iIixTMD1wLmNhdGVnb3J5Pz8iIixLMD1wLmV2ZW50TWVzc2FnZT8/IiI7aWYoIUswKXJldHVybjtpZihnIT09dSl7aWYoaSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IFoxPXYoZyk7Y29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke2d9JHtZMD9gICVjJHtZMH0ke1MwPyI6IitTMDoiIn1gOiIifWAsYGNvbG9yOiR7WjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLlkwP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksaT0hMCx1PWd9bGV0IG0wPShwLm1lc3NhZ2VUeXBlPz8iIikudG9Mb3dlckNhc2UoKSx2MD1ZMCYmZz09PXU/YCVjJHtTMHx8WTB9JWMgYDoiIix3MD12MD9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYobTA9PT0iZmF1bHQifHxtMD09PSJlcnJvciIpY29uc29sZS5sb2coYCR7djB9JWMke0swfWAsLi4udzAsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKG0wPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHt2MH0lYyR7SzB9YCwuLi53MCwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7djB9JWMke0swfWAsLi4udzAsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKGkpY29uc29sZS5ncm91cEVuZCgpO0suY2xvc2UoKX19LFtYPy5sb2dzRW5kcG9pbnRdKSwhWClyZXR1cm4gUShaNix7ZGV2aWNlczpZLGxvYWRpbmc6WixlcnJvcjokLG9uUmVmcmVzaDpQfSk7bGV0IEY9WS5maW5kKChLKT0+Sy51ZGlkPT09WC5kZXZpY2UpPz9udWxsO2ooKCk9Pntkb2N1bWVudC50aXRsZT1GPy5uYW1lP2BTaW11bGF0b3IgLSAke0YubmFtZX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtGPy5uYW1lXSk7bGV0IEE9ZDAoRj8ubmFtZSksST1wNChYLnN0cmVhbVVybCksW3MsaF09ayhudWxsKSxjPXM/P0kuY29uZmlnPz9NMShBLEY/Lm5hbWUpLGU9dzEoQSxjKSxuPUExKEEsYyksXzA9STEoYyksZj1iKG51bGwpO2ooKCk9PntsZXQgSz0hMSxUPW51bGwsUz1udWxsLHY9KCk9PntpZihLfHxUKXJldHVybjtUPXNldFRpbWVvdXQoKCk9PntUPW51bGwsdSgpfSwxMDAwKX0sdT0oKT0+e2xldCBpPW5ldyBXZWJTb2NrZXQoWC53c1VybCk7aS5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsUz1pLGYuY3VycmVudD1pLGkub25jbG9zZT0oKT0+e2lmKGYuY3VycmVudD09PWkpZi5jdXJyZW50PW51bGw7digpfSxpLm9uZXJyb3I9KCk9PntpLmNsb3NlKCl9fTtyZXR1cm4gdSgpLCgpPT57aWYoSz0hMCxUKWNsZWFyVGltZW91dChUKTtpZihmLmN1cnJlbnQ9PT1TKWYuY3VycmVudD1udWxsO1M/LmNsb3NlKCl9fSxbWC53c1VybF0pO2xldCB5PVIoKEssVCk9PntsZXQgUz1mLmN1cnJlbnQ7aWYoIVN8fFMucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgdj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoVCkpLHU9bmV3IFVpbnQ4QXJyYXkoMSt2Lmxlbmd0aCk7dVswXT1LLHUuc2V0KHYsMSksUy5zZW5kKHUpfSxbXSksZD1SKChLKT0+eSgzLEspLFt5XSksWTE9UigoSyk9PnkoNSxLKSxbeV0pLGMwPVIoKEspPT55KDQse2J1dHRvbjpLfSksW3ldKSxSMD1SKChLKT0+e2goKFQpPT5UJiZULndpZHRoPT09Sy53aWR0aCYmVC5oZWlnaHQ9PT1LLmhlaWdodCYmVC5vcmllbnRhdGlvbj09PUsub3JpZW50YXRpb24/VDpLKX0sW10pLGIxPVIoKEspPT57eSg3LHtvcmllbnRhdGlvbjpLfSl9LFt5XSk7aigoKT0+e2gobnVsbCl9LFtYLnN0cmVhbVVybF0pLGooKCk9PntsZXQgSz1JLmNvbmZpZztpZighSylyZXR1cm47aCgoVCk9PlQmJlQud2lkdGg9PT1LLndpZHRoJiZULmhlaWdodD09PUsuaGVpZ2h0JiZULm9yaWVudGF0aW9uPT09Sy5vcmllbnRhdGlvbj9UOm51bGwpfSxbSS5jb25maWc/LndpZHRoLEkuY29uZmlnPy5oZWlnaHQsSS5jb25maWc/Lm9yaWVudGF0aW9uXSk7bGV0IFAwPVIoKEssVCk9Pnt5KDYse3R5cGU6Syx1c2FnZTpUfSl9LFt5XSksW2wwLFUwXT1rKG51bGwpLFtoMCxnMF09ayghMSksW0wwLGEwXT1rKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKTtqKCgpPT57bGV0IEs9KCk9PmEwKHdpbmRvdy5pbm5lcldpZHRoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEspfSxbXSksaigoKT0+e2xldCBLPW5ldyBFdmVudFNvdXJjZShYLmFwcFN0YXRlRW5kcG9pbnQ/P1E5KCJhcHBzdGF0ZSIpKSxUPW51bGw7cmV0dXJuIEsub25tZXNzYWdlPShTKT0+e3RyeXtsZXQgdj1KU09OLnBhcnNlKFMuZGF0YSk7aWYoVCljbGVhclRpbWVvdXQoVCk7bGV0IHU9dj8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtUPXNldFRpbWVvdXQoKCk9PlUwKHYpLHUpfWNhdGNoe319LCgpPT57aWYoVCljbGVhclRpbWVvdXQoVCk7Sy5jbG9zZSgpfX0sW1guYXBwU3RhdGVFbmRwb2ludF0pO2xldCBJMD1SKGFzeW5jKCk9PntQMCgiZG93biIsMjI3KSxhd2FpdCBuZXcgUHJvbWlzZSgoUyk9PnNldFRpbWVvdXQoUywzMCkpLFAwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKFMpPT5zZXRUaW1lb3V0KFMsMzApKSxQMCgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoUyk9PnNldFRpbWVvdXQoUywzMCkpLFAwKCJ1cCIsMjI3KX0sW1AwXSksaTA9YihudWxsKSxbTTAsQTBdPWsoITApLFgwPWIoITApO1gwLmN1cnJlbnQ9TTA7bGV0IGIwPWIobmV3IFNldCk7aigoKT0+e2xldCBLPShUKT0+e2xldCBTPSEhaTAuY3VycmVudD8uY29udGFpbnMoVC50YXJnZXQpO0EwKFMpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLEssITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsSywhMCl9LFtdKSxqKCgpPT57aWYoTTApcmV0dXJuO2xldCBLPWIwLmN1cnJlbnQ7aWYoSy5zaXplPT09MClyZXR1cm47Zm9yKGxldCBUIG9mIEspeSg2LHt0eXBlOiJ1cCIsdXNhZ2U6VH0pO0suY2xlYXIoKX0sW00wLHldKSxqKCgpPT57bGV0IEs9KHYsdSk9PntpZighWDAuY3VycmVudClyZXR1cm47aWYodi5jb2RlPT09IktleUgiJiZ2Lm1ldGFLZXkmJnYuc2hpZnRLZXkpe2lmKHYucHJldmVudERlZmF1bHQoKSx1PT09ImRvd24iJiYhdi5yZXBlYXQpeSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKHYuY29kZT09PSJLZXlBIiYmdi5tZXRhS2V5JiZ2LnNoaWZ0S2V5KXtpZih2LnByZXZlbnREZWZhdWx0KCksdT09PSJkb3duIiYmIXYucmVwZWF0KXEwKGB4Y3J1biBzaW1jdGwgdWkgJHtYLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKFcwKT0+e2xldCBwPVcwLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIHEwKGB4Y3J1biBzaW1jdGwgdWkgJHtYLmRldmljZX0gYXBwZWFyYW5jZSAke3B9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1sZXQgaT1kNCh2LmNvZGUpO2lmKGk9PW51bGwpcmV0dXJuO2lmKHYucHJldmVudERlZmF1bHQoKSx1PT09ImRvd24iKWIwLmN1cnJlbnQuYWRkKGkpO2Vsc2UgYjAuY3VycmVudC5kZWxldGUoaSk7eSg2LHt0eXBlOnUsdXNhZ2U6aX0pfSxUPSh2KT0+Syh2LCJkb3duIiksUz0odik9PksodiwidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsUyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixTKX19LFt5LFguZGV2aWNlXSk7bGV0IHowPVIoYXN5bmMoSyk9PntpZihWfHxLLnVkaWQ9PT1YLmRldmljZSlyZXR1cm47SCghMCk7dHJ5e2lmKEsuc3RhdGUhPT0iQm9vdGVkIilhd2FpdCBxMChgeGNydW4gc2ltY3RsIGJvb3QgJHtLLnVkaWR9YCk7bGV0IFQ9YXdhaXQgcTAoYGJ1bnggc2VydmUtc2ltIC0tZGV0YWNoICR7Sy51ZGlkfWApO2lmKFQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFQuc3RkZXJyfHwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlLXNpbSIpO2xldCBTPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1Muc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixLLnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oUy50b1N0cmluZygpKX1jYXRjaHtIKCExKX19LFtWLFguZGV2aWNlXSksRDA9bjQoKSxvMD1lNCh7ZXhlYzpxMCx1ZGlkOlguZGV2aWNlLGVuYWJsZWQ6RyxvblVwbG9hZFN0YXJ0OkQwLmFkZCxvblVwbG9hZEVuZDooSyxULFMpPT5EMC51cGRhdGUoSyx7c3RhdHVzOlQ/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTpTfSksb25VbnN1cHBvcnRlZDooSyk9PntsZXQgVD1EMC5hZGQoSy5uYW1lLCJtZWRpYSIpO0QwLnVwZGF0ZShULHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtLLnR5cGV8fCQ5KEspfWB9KX19KSwkMD1SKGFzeW5jKEspPT57QigoVCk9Pm5ldyBTZXQoVCkuYWRkKEspKTt0cnl7YXdhaXQgcTAoYHhjcnVuIHNpbWN0bCBzaHV0ZG93biAke0t9YCksYXdhaXQgUCgpfWZpbmFsbHl7QigoVCk9PntsZXQgUz1uZXcgU2V0KFQpO3JldHVybiBTLmRlbGV0ZShLKSxTfSl9fSxbUF0pLGowPXk4KzI0LEcwPWgwJiZMMD49bitqMCs2ND9qMDowO3JldHVybiBRKGM0LHtlbmRwb2ludDpPP1g/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlEoImRpdiIse3N0eWxlOnsuLi5aMC5wYWdlLHBhZGRpbmdSaWdodDoyNCtHMCx0cmFuc2l0aW9uOiJwYWRkaW5nLXJpZ2h0IDAuMjVzIGVhc2UifSxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6ey4uLlowLnNpbXVsYXRvclN0YWNrLG1heFdpZHRoOm59LGNoaWxkcmVuOltRKEowLHtleGVjOnEwLG9uUm90YXRlOmIxLG9yaWVudGF0aW9uOmMub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDpYLmRldmljZSxkZXZpY2VOYW1lOkY/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpGPy5ydW50aW1lPz9udWxsLHN0cmVhbWluZzpHLGNoaWxkcmVuOltRKGE0LHtkZXZpY2VzOlksc2VsZWN0ZWRVZGlkOlguZGV2aWNlLGxvYWRpbmc6WixlcnJvcjokLHN0b3BwaW5nVWRpZHM6TCxvblJlZnJlc2g6UCxvblNlbGVjdDp6MCxvblN0b3A6JDAsdHJpZ2dlcjpRKEowLlRpdGxlLHt9KX0pLFEoSjAuQWN0aW9ucyx7Y2hpbGRyZW46W2wwPy5pc1JlYWN0TmF0aXZlJiZRKEowLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIEkwKCksY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgMy41LTcuMSJ9KSxRKCJwb2x5bGluZSIse3BvaW50czoiMyAzIDMgOSA5IDkifSldfSl9KSxRKEowLkhvbWVCdXR0b24se29uQ2xpY2s6KEspPT57Sy5wcmV2ZW50RGVmYXVsdCgpLGMwKCJob21lIil9fSksUSh6Nix7b3ZlcmxheUVuYWJsZWQ6TyxzdHJlYW1pbmc6RyxvblRvZ2dsZU92ZXJsYXk6KCk9PlUoKEspPT4hSyl9KSxRKEowLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSksUSgiZGl2Iix7cmVmOmkwLHN0eWxlOnttYXhXaWR0aDpuLG1heEhlaWdodDoiMTAwJSIsd2lkdGg6IjEwMCUiLGFzcGVjdFJhdGlvOl8wLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LC4uLm8wLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46W1EoVTEse3VybDpYLnVybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIn0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmUsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIn0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOkosb25TdHJlYW1Ub3VjaDpkLG9uU3RyZWFtTXVsdGlUb3VjaDpZMSxvblN0cmVhbUJ1dHRvbjpjMCxzdWJzY3JpYmVGcmFtZTpJLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOkkuZnJhbWUsc3RyZWFtQ29uZmlnOmMsb25TY3JlZW5Db25maWdDaGFuZ2U6UjB9KSxPJiZRKFE2LHt9KSxvMC5pc0RyYWdPdmVyJiZRKCJkaXYiLHtzdHlsZTp7Li4uWjAuZHJvcE92ZXJsYXksYm9yZGVyUmFkaXVzOmV9LGNoaWxkcmVuOltRKCJzdmciLHt3aWR0aDoiMzIiLGhlaWdodDoiMzIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifSksUSgicG9seWxpbmUiLHtwb2ludHM6IjE3IDggMTIgMyA3IDgifSksUSgibGluZSIse3gxOiIxMiIseTE6IjMiLHgyOiIxMiIseTI6IjE1In0pXX0pLFEoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTMsZm9udFdlaWdodDo1MDB9LGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSldfSldfSksRDAudG9hc3RzLmxlbmd0aD4wJiZRKCJkaXYiLHtzdHlsZTpaMC50b2FzdFN0YWNrLGNoaWxkcmVuOkQwLnRvYXN0cy5tYXAoKEspPT5RKCJkaXYiLHtzdHlsZTpaMC50b2FzdCxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi5aMC5kb3QsYmFja2dyb3VuZDpLLnN0YXR1cz09PSJ1cGxvYWRpbmciPyIjYTViNGZjIjpLLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLFEoInNwYW4iLHtzdHlsZTp7ZmxleDoxLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltLLnN0YXR1cz09PSJ1cGxvYWRpbmciJiYoSy5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHtLLm5hbWV94oCmYDpgVXBsb2FkaW5nICR7Sy5uYW1lfeKApmApLEsuc3RhdHVzPT09InN1Y2Nlc3MiJiYoSy5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAke0submFtZX1gOmBBZGRlZCAke0submFtZX0gdG8gUGhvdG9zYCksSy5zdGF0dXM9PT0iZXJyb3IiJiZgJHtLLm5hbWV9OiAke0subWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSxLLmlkKSl9KSxRKCJidXR0b24iLHtvbkNsaWNrOigpPT5nMCgoSyk9PiFLKSxzdHlsZTp7Li4uQy50b2dnbGUsb3BhY2l0eTpoMD8wOjEscG9pbnRlckV2ZW50czpoMD8ibm9uZSI6ImF1dG8ifSwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLHRpdGxlOiJPcGVuIHRvb2xzIixjaGlsZHJlbjpRKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicmVjdCIse3g6IjMiLHk6IjQiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxNiIscng6IjIuNSJ9KSxRKCJsaW5lIix7eDE6IjE1Iix5MToiNCIseDI6IjE1Iix5MjoiMjAifSldfSl9KSxRKFc2LHtvcGVuOmgwLG9uQ2xvc2U6KCk9PmcwKCExKSx1ZGlkOlguZGV2aWNlLGN1cnJlbnRBcHA6bDAsYXhPdmVybGF5RW5hYmxlZDpPLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5VKChLKT0+IUspfSksUSgiZGl2Iix7c3R5bGU6WjAuYmFyLGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Li4uWjAubGl2ZSxjb2xvcjpHPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6ey4uLlowLmRvdCxiYWNrZ3JvdW5kOkc/IiM0YWRlODAiOiIjNjY2In19KSxHPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9KV19KX0pfXZhciBaMD17cGFnZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGhlaWdodDoiMTAwdmgiLGJhY2tncm91bmQ6IiMwYTBhMGEiLHBhZGRpbmc6MjQsZ2FwOjEyLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsYm94U2l6aW5nOiJib3JkZXItYm94In0sc2ltdWxhdG9yU3RhY2s6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsd2lkdGg6IjEwMCUiLG1pbldpZHRoOjAsdHJhbnNpdGlvbjoibWF4LXdpZHRoIDAuMjVzIGVhc2UifSxiYXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjEwLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixjb2xvcjoiIzY2NiJ9LGxpdmU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjUsdHJhbnNpdGlvbjoiY29sb3IgMC4zcyJ9LGRvdDp7d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJSYWRpdXM6IjUwJSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjNzIn0sZW1wdHk6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsdGV4dEFsaWduOiJjZW50ZXIifSxlbXB0eVRpdGxlOntmb250U2l6ZToxOCxtYXJnaW46MCxjb2xvcjoiI2VlZSJ9LGVtcHR5SGludDp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0LG1heFdpZHRoOjQ4MH0sY29kZTp7YmFja2dyb3VuZDoiIzIyMiIscGFkZGluZzoiMnB4IDZweCIsYm9yZGVyUmFkaXVzOjQsZm9udFNpemU6MTN9LGRyb3BPdmVybGF5Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDo4LGJvcmRlcjoiMnB4IGRhc2hlZCAjYTViNGZjIixiYWNrZ3JvdW5kOiJyZ2JhKDk5LDEwMiwyNDEsMC4xMikiLGJhY2tkcm9wRmlsdGVyOiJibHVyKDJweCkiLGNvbG9yOiIjYTViNGZjIixwb2ludGVyRXZlbnRzOiJub25lIix6SW5kZXg6MjB9LHRvYXN0U3RhY2s6e3Bvc2l0aW9uOiJmaXhlZCIsYm90dG9tOjE2LHJpZ2h0OjE2LGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjYsbWF4V2lkdGg6MzIwLHpJbmRleDozMH0sdG9hc3Q6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjgscGFkZGluZzoiOHB4IDEycHgiLGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo4LGNvbG9yOiIjZWVlIixmb250U2l6ZToxMixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsYm94U2hhZG93OiIwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC40KSJ9fSxENj17cG9zaXRpb246ImFic29sdXRlIix0b3A6ImNhbGMoMTAwJSArIDZweCkiLGxlZnQ6MCxtaW5XaWR0aDoyNjAsbWF4SGVpZ2h0OjM2MCxvdmVyZmxvd1k6ImF1dG8iLGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czoxMCxwYWRkaW5nOjQsYm94U2hhZG93OiIwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEzLGNvbG9yOiIjZWVlIix6SW5kZXg6MjB9LGI4PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI2cHggMTBweCIsZm9udFNpemU6MTEsY29sb3I6IiNhYWEifSxqOD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNhNWI0ZmMiLGZvbnRTaXplOjExLGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowfSxaOT17cGFkZGluZzoiNnB4IDEwcHgiLGNvbG9yOiIjZjg3MTcxIixmb250U2l6ZToxMX0scTk9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjgscGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjE1cyJ9LE82PXtoZWlnaHQ6MSxiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixtYXJnaW46IjRweCAwIn0sUzg9e3BhZGRpbmc6MTIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFNpemU6MTEsdGV4dEFsaWduOiJjZW50ZXIifSx2OD17cGFkZGluZzoiNnB4IDEwcHggMnB4Iixmb250U2l6ZToxMCxmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQpIix0ZXh0VHJhbnNmb3JtOiJ1cHBlcmNhc2UiLGxldHRlclNwYWNpbmc6IjAuMDhlbSJ9LHk4PTMyMCxDPXt0b2dnbGU6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjE2LHJpZ2h0OjE2LHdpZHRoOjMwLGhlaWdodDozMCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo2LGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGN1cnNvcjoicG9pbnRlciIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlIix6SW5kZXg6NDB9LHBhbmVsOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxMixyaWdodDoxMixib3R0b206MTIsd2lkdGg6eTgsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjkyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjE0LGNvbG9yOiIjZWVlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSIsYm94U2hhZG93OiIwIDEycHggNDBweCByZ2JhKDAsMCwwLDAuNTUpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsekluZGV4OjM1fSxoZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjZweCAxMHB4IDZweCAxMnB4In0saGVhZGVyVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIn0sY2xvc2VCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjYWFhIixjdXJzb3I6InBvaW50ZXIiLHBhZGRpbmc6NCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJvcmRlclJhZGl1czo0fSxib2R5OntwYWRkaW5nOjE0LG92ZXJmbG93WToiYXV0byIsZmxleDoxLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjEyfSxzZWN0aW9uVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wOGVtIixtYXJnaW46IjAgMCAxMHB4In0sc2VjdGlvbjp7YmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6MTJ9LGVtcHR5OntiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzoxNixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250U2l6ZToxMix0ZXh0QWxpZ246ImNlbnRlciJ9LGFwcEhlYWRlcjp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsbWFyZ2luQm90dG9tOjEwfSxhcHBJY29uOnt3aWR0aDo0NCxoZWlnaHQ6NDQsYm9yZGVyUmFkaXVzOjEwLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIn0sYXBwTmFtZTp7Zm9udFNpemU6MTQsZm9udFdlaWdodDo2MDAsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sYXBwQnVuZGxlOntmb250U2l6ZToxMSxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sc3Bpbm5lcjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFdlaWdodDo0MDB9LGVycm9yOntiYWNrZ3JvdW5kOiJyZ2JhKDI0OCwxMTMsMTEzLDAuMDgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI0OCwxMTMsMTEzLDAuMikiLGNvbG9yOiIjZmNhNWE1Iixmb250U2l6ZToxMSxwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6NixtYXJnaW5Cb3R0b206MTB9LGRsOnttYXJnaW46MCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo2fSxyb3c6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImJhc2VsaW5lIixnYXA6OCxtaW5XaWR0aDowfSxkdDp7bWFyZ2luOjAsZm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsd2lkdGg6ODQsZmxleFNocmluazowfSxkZDp7bWFyZ2luOjAsZm9udFNpemU6MTIsY29sb3I6IiNlZWUiLGZsZXg6MSxtaW5XaWR0aDowLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LHJvd0FjdGlvbldyYXA6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAscmlnaHQ6MCxib3R0b206MCxwYWRkaW5nTGVmdDoyOCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI4LDI4LDMwLDApIDAlLCAjMWMxYzFlIDU1JSkiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UifSxwZXJtc1RvZ2dsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjYsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIscGFkZGluZzowLG1hcmdpbjowLGN1cnNvcjoicG9pbnRlciIsd2lkdGg6IjEwMCUiLHRleHRBbGlnbjoibGVmdCIsbGluZUhlaWdodDoxfSxwZXJtc1Njcm9sbFdyYXA6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbWFyZ2luVG9wOjh9LHBlcm1zU2Nyb2xsOnttYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOiI4cHggMCIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxwZXJtc0ZhZGVUb3A6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHJpZ2h0OjAsaGVpZ2h0OjE0LHBvaW50ZXJFdmVudHM6Im5vbmUiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxYzFjMWUgMCUsIHJnYmEoMjgsMjgsMzAsMCkgMTAwJSkiLGJvcmRlclRvcExlZnRSYWRpdXM6MTAsYm9yZGVyVG9wUmlnaHRSYWRpdXM6MTB9LHBlcm1zRmFkZUJvdHRvbTp7cG9zaXRpb246ImFic29sdXRlIixib3R0b206MCxsZWZ0OjAscmlnaHQ6MCxoZWlnaHQ6MTQscG9pbnRlckV2ZW50czoibm9uZSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzFjMWMxZSAwJSwgcmdiYSgyOCwyOCwzMCwwKSAxMDAlKSJ9LHBlcm1zRm9vdGVyOntkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLHBhZGRpbmdUb3A6OH0scmVzZXRBbGxCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggOHB4Iixib3JkZXJSYWRpdXM6NSxjdXJzb3I6InBvaW50ZXIiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wNGVtIn0scGVybXNMaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo0fSxwZXJtUm93OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxwYWRkaW5nOiI0cHggMnB4In0scGVybUxhYmVsOntmb250U2l6ZToxMixjb2xvcjoiI2VlZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixmbGV4OjEsbWluV2lkdGg6MH0scGVybVNlZzp7ZGlzcGxheToiZmxleCIsZ2FwOjIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA0KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoyfSxwZXJtQnRuOnt3aWR0aDoyNCxoZWlnaHQ6MjIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xMnMsIGNvbG9yIDAuMTJzIn0scm93QWN0aW9uOnt3aWR0aDoyMCxoZWlnaHQ6MjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6NCxjb2xvcjoiI2ZmZiIsY3Vyc29yOiJwb2ludGVyIixwYWRkaW5nOjB9fSxRMD17dGFyZ2V0czp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLG92ZXJmbG93OiJoaWRkZW4iLHBvaW50ZXJFdmVudHM6Im5vbmUiLHpJbmRleDoxMH0sdGFyZ2V0Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGJveFNpemluZzoiYm9yZGVyLWJveCIsbWluV2lkdGg6MSxtaW5IZWlnaHQ6MSxwYWRkaW5nOjAsYm9yZGVyOiIxcHggc29saWQgIzM0ZDM5OSIsYm9yZGVyUmFkaXVzOjMsY3Vyc29yOiJwb2ludGVyIixwb2ludGVyRXZlbnRzOiJhdXRvIn0scGFuZWxIZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDo4fSxvdmVybGF5VG9nZ2xlOntib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6NSxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43KSIsY3Vyc29yOiJwb2ludGVyIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggN3B4In0sZW1wdHlMaW5rOntjb2xvcjoiI2E1YjRmYyIsdGV4dERlY29yYXRpb246Im5vbmUifSx0b29sYmFyQnV0dG9uQWN0aXZlOntiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9LHRvb2xiYXJCdXR0b25BY3RpdmVIb3Zlcjp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGxpc3Q6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjQsbWFyZ2luVG9wOjgscGFkZGluZzoiOHB4IDAiLG1heEhlaWdodDoyNjAsb3ZlcmZsb3dZOiJhdXRvIixzY3JvbGxiYXJXaWR0aDoidGhpbiJ9LGxpc3RJdGVtOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMnB4IixtaW5XaWR0aDowfSxsaXN0SXRlbUFjdGl2ZTp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA2KSJ9LGl0ZW1UZXh0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDoyLGZsZXg6MSxtaW5XaWR0aDowfSxpdGVtTGFiZWw6e292ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCIsY29sb3I6IiNlZWUiLGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NTAwfSxpdGVtTWV0YTp7b3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwfSxpdGVtU2l6ZTp7ZmxleFNocmluazowLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czo2LGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsZm9udFNpemU6MTAscGFkZGluZzoiM3B4IDZweCJ9fTtHOChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoUShINix7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return k}function b_(e){let _=(e?.basePath??"/.sim").replace(/\/+$/,"");return(t,s,S)=>{let i=t.url??"",C=i.indexOf("?"),A=C===-1?i:i.slice(0,C),n=v_(i)??e?.device??null;if(A===_||A===_+"/"){let r=d(),o=T(r,n),$=g_();if(o){let a=`<script>window.__SIM_PREVIEW__=${JSON.stringify({...o,basePath:_,logsEndpoint:q(_,"/logs",o.device),appStateEndpoint:q(_,"/appstate",o.device),axEndpoint:q(_,"/ax",o.device)})}</script>`;$=$.replace("<!--__SIM_PREVIEW_CONFIG__-->",a)}s.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),s.end($);return}if(A===_+"/api"){let r=d(),o=T(r,n);s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(o||null));return}if(A===_+"/ax"){let r=d(),o=T(r,n);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(`:
|
|
4
|
+
`}function HS({udid:_}){let e=new Set,t=null,S=null,i=Pe,s=!1,C=()=>{if(e.size===0||t)return;t=setTimeout(A,i)},A=async()=>{if(t=null,s||e.size===0){C();return}s=!0;try{let r=await dS(_),o=gS(r);if(o!==S){for(let y of e)y.write(o);i=Pe}else i=Math.min(i*2,FS);if(S=o,bS(r))i=DS}finally{s=!1,C()}};return{addClient(r){if(e.add(r),S)r.write(S);return A(),()=>{if(e.delete(r),e.size===0&&t)clearTimeout(t),t=null}}}}function Ue(){let _=new Map;return{get(e){let t=_.get(e);if(t)return t;let S=HS({udid:e});return _.set(e,S),S}}}var fS=3500,Q_=500,Pe=500,FS=2000,DS=15000,TS;var qe=z_(()=>{TS=BS(cS)});var Dt={};Le(Dt,{startCdpServer:()=>_i,startBunCdpServer:()=>Ci,listTargets:()=>ri,listDevices:()=>ft});import{createRequire as hS}from"node:module";import*as Ye from"node:net";import*as St from"node:net";import{spawnSync as es}from"node:child_process";import*as Ct from"node:tls";import*as nt from"node:http";function WS(_){return this[_]}function Xe(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&":e==="<"?"<":e===">"?">":e==="'"?"'":""")}function KS(_){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 te(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${Xe(_)}</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>${KS(_)}</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)=>te(s,e+"\t")).join(`
|
|
5
|
+
`);return`${e}<array>
|
|
6
|
+
${i}
|
|
7
|
+
${e}</array>`}let t=Object.keys(_);if(t.length===0)return`${e}<dict/>`;let S=t.map((i)=>`${e} <key>${Xe(i)}</key>
|
|
8
|
+
`+te(_[i],e+"\t")).join(`
|
|
9
|
+
`);return`${e}<dict>
|
|
10
|
+
${S}
|
|
11
|
+
${e}</dict>`}function Ae(_){let e=te(_,"");return new TextEncoder().encode(XS+e+kS)}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(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/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?se(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?se(C.name):Se(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function se(_){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?se(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 zS(_){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 n=0;n<s;n++)r[n]=S_(_,A+n*S,S);function o(n){return S_(_,n,i)}function y(n){let F=r[n],O=_[F],v=O>>4,b=O&15;function u(p){if(b!==15)return{len:b,next:p};let E=_[p];if((E&240)!==16)throw Error("expected int marker for length");let f=1<<(E&15);return{len:S_(_,p+1,f),next:p+1+f}}switch(v){case 0:if(b===0)return null;if(b===8)return!1;if(b===9)return!0;if(b===15)return null;throw Error(`unknown singleton ${b}`);case 1:{let p=1<<b,E=S_(_,F+1,p);if(p===8&&E>Number.MAX_SAFE_INTEGER)return BigInt(E);return E}case 2:{let p=1<<b,E=new DataView(_.buffer,_.byteOffset+F+1,p);return p===4?E.getFloat32(0,!1):E.getFloat64(0,!1)}case 3:{let E=new DataView(_.buffer,_.byteOffset+F+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+E*1000)}case 4:{let{len:p,next:E}=u(F+1);return _.slice(E,E+p)}case 5:{let{len:p,next:E}=u(F+1);return new TextDecoder("ascii").decode(_.slice(E,E+p))}case 6:{let{len:p,next:E}=u(F+1),f=_.slice(E,E+p*2),B=new Uint8Array(f.length);for(let T=0;T<f.length;T+=2)B[T]=f[T+1],B[T+1]=f[T];return new TextDecoder("utf-16le").decode(B)}case 10:{let{len:p,next:E}=u(F+1),f=[];for(let B=0;B<p;B++)f.push(y(o(E+B*i)));return f}case 13:{let{len:p,next:E}=u(F+1),f={};for(let B=0;B<p;B++){let T=y(o(E+B*i)),a=y(o(E+(p+B)*i));if(typeof T!=="string")throw Error(`non-string dict key: ${typeof T}`);f[T]=a}return f}default:throw Error(`unknown bplist marker 0x${O.toString(16)} at ${F}`)}}return y(C)}function jS(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return zS(_)}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 oe(_,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 ne(){let _=new h_;return new Promise((e,t)=>{let S=Ye.createConnection({path:ZS}),i=(s)=>{_.close(s),t(s)};S.once("error",i),S.once("connect",()=>{S.off("error",i);let s=oe(S,_);e({socket:S,stream:_,detach:s})})})}async function YS(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(t-4)).slice(12)}function _s(_,e,t){let S=16+t.length,i=new Uint8Array(16),s=new DataView(i.buffer);s.setUint32(0,S,!0),s.setUint32(4,QS,!0),s.setUint32(8,JS,!0),s.setUint32(12,e,!0),_.write(i),_.write(t)}async function ye(_,e,t,S){let i=Ae({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...S});_s(_,t,i);let s=await YS(e);return H_(s)}async function et(){let{socket:_,stream:e}=await ne();try{return(await ye(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function tt(_){let{socket:e,stream:t}=await ne();try{let i=(await ye(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 ne(),s=(e&255)<<8|e>>8&255,C=await ye(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 st(){let _=es("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),oe(i,e),t({socket:i,stream:e})})})}async function J_(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return H_(S)}function Z_(_,e){let t=Ae({Label:"inspect-webkit",...e}),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function Y_(_,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_,A=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)};A.once("error",r),A.once("secureConnect",()=>{z(`${S} tls handshake complete`),A.off("error",r);let o=oe(A,C);i({socket:A,stream:C,detach:o})})})}class N_{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 N_(t,S,e,_.Properties.SerialNumber,_.DeviceID,i);z("sending QueryType"),Z_(t,{Request:"QueryType"});let C=await J_(S);if(z("QueryType reply:",C),Y_(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),Z_(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await J_(this.stream);if(z("StartSession reply:",_),Y_(_,"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",_),Z_(this.socket,{Request:"StartService",Service:_});let e=await J_(this.stream);return z("StartService reply:",e),Y_(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 ts(_){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=Ae(e),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function ss(){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 E_{socket;stream;connectionId=ss();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let t=await ts(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 ae{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 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 Cs(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function N(_,e,t){return _.fireResultToTools(e.id,t),Promise.resolve(null)}function rs(_,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 $s(_,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 As(_,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",o=os(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:A,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: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:ns(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 os(_){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 ns(_){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 ys(_){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 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)=>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 $t(s.params?.frame),Promise.resolve(s)}),_.addMessageFilter("target::Page.getResourceTree",(s)=>{return ie(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=At(C?.frameTree);ie(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 $t(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function ie(_){if(!_)return;if($t(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(ie)}function At(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(At);return e}function cs(_){_.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 Bs(_){_.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 _e(_){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 vs(_){if(!_)return _;return{...ps,..._,hasPostData:_.postData!=null}}function Os(_){if(!_)return _;let e=0,t=_.headers??{},S=t["Content-Length"]??t["content-length"];if(S!=null)e=Number(S)||0;return{...us,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function ls(_,e){if(!_)return;for(let[t,S]of Object.entries(e))if(t in _&&!(S in _))_[S]=_[t],delete _[t]}function bs(_){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 ws(_,e){let t=new Map,S=1024;for(let[s,C]of Object.entries(fs))_.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(bs):[];_.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}),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(Fs))_.addMessageFilter(`target::${s}`,(A)=>{return ls(A.params,C),Promise.resolve(A)});_.addMessageFilter("target::Network.requestWillBeSent",(s)=>{let C=s.params;if(C){if(Object.assign(C,{...Ds,...C}),C.request=vs(C.request),C.type=_e(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,{...Ts,...C}),C.response=Os(C.response),C.type=_e(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,{...Es,...C})}return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFailed",(s)=>{let C=s.params;if(C){if(C.type=_e(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,o;if(r)o=`network-resource:${C.frameId??""}:${C.url}`,e.set(o,String(A.content));_.fireResultToTools(s.id,{resource:{success:r,stream:o,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 ds(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(t)=>N(_,t,{}))}function gs(_){_.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 hs(_){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 Ce(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:s_(_.style),selectorList:ms(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((t)=>({text:t.text,sourceURL:t.sourceURL,source:Vs[t.type]}));return e}function Gs(_){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=hs(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:Re(C?.matchedCSSRules),pseudoElements:Ls(C?.pseudoElements),inherited:Ws(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),o=await _.callTarget("CSS.setStyleText",{styleId:r,text:A.text});C.push(s_(o?.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:Ce(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:Ce(A?.rule)})}catch(A){_.fireErrorToTools(i.id,{message:A?.message??String(A)})}return null})}function Ps(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>N(_,e,Ms)),_.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 Is(_){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=`(${Us}, __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)||Xs,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 Ks(_){_.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(zs))_.addMessageFilter(`tools::${t}`,(i)=>N(_,i,S));for(let t of xs)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 ot(_){let e=Cs();js(_);let t=ks(_);rs(_,e),$s(_,e),As(_,e),ys(_),as(_),Rs(_,e),cs(_),Bs(_),ws(_,t),ds(_),gs(_),Gs(_),Ps(_),Is(_),Ks(_)}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)=>Qs[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 ee(t,s)}if(S.pathname==="/json"||S.pathname==="/json/list")return ee(t,_.listTargets(i));if(S.pathname==="/json/protocol")return ee(t,{});if(S.pathname==="/")return Js(t,_,i);t.writeHead(404,{"content-type":"text/plain"}),t.end("not found")})}function ee(_,e,t=200){_.writeHead(t,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function Js(_,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 & 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>`,A=`<!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(A)}function Rt(_,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 ct(_){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),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 Zs(_,e){let t=!!process.env.INSPECT_WEBKIT_DEBUG,S=new Map,i=!1,s=!1,C=!1,A=new Map,r=null;function o(f){if(_.readyState!==1)return;let B=JSON.stringify(f);if(t)console.error(`[browser] tools<< ${B.slice(0,240)}`);_.send(B)}function y(f,B){let T={method:f,params:B};if(r)T.sessionId=r;o(T)}function n(f,B){return{targetId:f.targetId,type:f.type==="page"?"page":f.type||"other",title:f.title||"",url:f.url||"",attached:B,canAccessOpener:!1,browserContextId:"default"}}function F(f){for(let B of S.values())if(B.targetId===f)return!0;return!1}function O(f,B){let T=e.listEntries().find((D)=>D.targetId===f);if(!T)return null;let a=crypto.randomUUID(),$=(D)=>{let w;try{w=JSON.parse(D)}catch{return}w.sessionId=a,o(w)},c=e.createPageSession(f,$);if(!c)return null;return S.set(a,{handle:c,targetId:f}),y("Target.attachedToTarget",{sessionId:a,targetInfo:n(T,!0),waitingForDebugger:B}),{sessionId:a,entry:T}}function v(f){let B=S.get(f);if(!B)return!1;try{B.handle.close()}catch{}return S.delete(f),y("Target.detachedFromTarget",{sessionId:f,targetId:B.targetId}),!0}function b(){let f=e.listEntries(),B=new Set;for(let T of f){B.add(T.targetId);let a=A.get(T.targetId);if(!a){if(A.set(T.targetId,T),i)y("Target.targetCreated",{targetInfo:n(T,F(T.targetId))});if(s&&!F(T.targetId))O(T.targetId,C)}else if(a.title!==T.title||a.url!==T.url){if(A.set(T.targetId,T),i)y("Target.targetInfoChanged",{targetInfo:n(T,F(T.targetId))})}}for(let T of[...A.keys()]){if(B.has(T))continue;A.delete(T);for(let[a,$]of S)if($.targetId===T)v(a);if(i)y("Target.targetDestroyed",{targetId:T})}}let u=setInterval(b,e.refreshMs??1000);function p(f,B){if(f)B.sessionId=f;o(B)}function E(f,B){let{id:T,method:a}=f,$=f.params??{};switch(a){case"Browser.getVersion":return p(B,{id:T,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 p(B,{id:T,result:{sessionId:r}})}case"Target.setDiscoverTargets":{if(i=!!$.discover,i)for(let c of e.listEntries())A.set(c.targetId,c),y("Target.targetCreated",{targetInfo:n(c,F(c.targetId))});if(typeof T==="number")p(B,{id:T,result:{}});return}case"Target.getTargets":{let c=e.listEntries().map((D)=>n(D,F(D.targetId)));return p(B,{id:T,result:{targetInfos:c}})}case"Target.setAutoAttach":{if(s=!!$.autoAttach,C=!!$.waitForDebuggerOnStart,s){for(let c of e.listEntries())if(!F(c.targetId))O(c.targetId,C)}if(typeof T==="number")p(B,{id:T,result:{}});return}case"Target.attachToTarget":{for(let[D,w]of S)if(w.targetId===$.targetId){if(typeof T==="number")p(B,{id:T,result:{sessionId:D}});return}let c=O($.targetId,!1);if(!c){if(typeof T==="number")p(B,{id:T,error:{code:-32000,message:"No target with given id found"}});return}if(typeof T==="number")p(B,{id:T,result:{sessionId:c.sessionId}});return}case"Target.detachFromTarget":{if(v($.sessionId),typeof T==="number")p(B,{id:T,result:{}});return}case"Target.sendMessageToTarget":{let c=S.get($.sessionId);if(c)c.handle.onMessageFromTools($.message);if(typeof T==="number")p(B,{id:T,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof T==="number")p(B,{id:T,result:{}});return;case"Target.getBrowserContexts":{if(typeof T==="number")p(B,{id:T,result:{browserContextIds:["default"]}});return}}if(typeof T==="number")p(B,{id:T,error:{code:-32601,message:`Browser-level method '${a??"?"}' not implemented`}})}_.on("message",(f,B)=>{let T=B?new TextDecoder().decode(f):f.toString();if(t)console.error(`[browser] tools>> ${T.slice(0,240)}`);let a;try{a=JSON.parse(T)}catch{return}if(typeof a.sessionId==="string"){if(a.sessionId===r){let D={...a};return delete D.sessionId,E(D,a.sessionId)}let $=S.get(a.sessionId);if(!$){if(typeof a.id==="number")o({id:a.id,sessionId:a.sessionId,error:{code:-32000,message:`Session ${a.sessionId} not found`}});return}let c={...a};delete c.sessionId,$.handle.onMessageFromTools(JSON.stringify(c));return}E(a,void 0)}),_.on("close",()=>{clearInterval(u);for(let[,f]of S)try{f.handle.close()}catch{}S.clear()})}async function _i(_={}){let e=_.port??9222,t=_.host??"localhost",S=await ei();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 u of S)C.set(u,[]),s.set(u,new Set),u.wi.subscribe((p)=>{let{__selector:E,__argument:f}=p;if(!E||!f)return;if(E==="_rpc_reportConnectedApplicationList:"){let B=f.WIRApplicationDictionaryKey??{},T=Object.entries(B).map(([$,c])=>({appId:$,bundleId:c.WIRApplicationBundleIdentifierKey,name:c.WIRApplicationNameKey??c.WIRApplicationBundleIdentifierKey??$,isProxy:Boolean(c.WIRIsApplicationProxyKey)}));C.set(u,T);let a=s.get(u);for(let $ of T){if($.isProxy||a.has($.appId))continue;a.add($.appId),u.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$.appId})}}else if(E==="_rpc_applicationConnected:"){let B=f,T=C.get(u)??[];if(!T.find((a)=>a.appId===B.WIRApplicationIdentifierKey))T.push({appId:B.WIRApplicationIdentifierKey,bundleId:B.WIRApplicationBundleIdentifierKey,name:B.WIRApplicationNameKey??B.WIRApplicationBundleIdentifierKey,isProxy:Boolean(B.WIRIsApplicationProxyKey)}),C.set(u,T);if(!B.WIRIsApplicationProxyKey){let a=s.get(u);if(!a.has(B.WIRApplicationIdentifierKey))a.add(B.WIRApplicationIdentifierKey),u.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:B.WIRApplicationIdentifierKey})}}else if(E==="_rpc_applicationDisconnected:"){let B=C.get(u)??[];C.set(u,B.filter((T)=>T.appId!==f.WIRApplicationIdentifierKey)),i.delete(`${u.id}:${f.WIRApplicationIdentifierKey}`)}else if(E==="_rpc_applicationSentListing:"){let B=f.WIRApplicationIdentifierKey,T=f.WIRListingKey??{},a=new Map;for(let[$,c]of Object.entries(T))a.set($,{pageId:Number(c.WIRPageIdentifierKey??0),title:c.WIRTitleKey??"",url:c.WIRURLKey??"",type:c.WIRTypeKey??""});i.set(`${u.id}:${B}`,a)}}),u.wi.send("_rpc_reportIdentifier:",{}),u.wi.send("_rpc_getConnectedApplications:",{});let A=setInterval(()=>{for(let u of S){let p=C.get(u)??[];for(let E of p){if(E.isProxy)continue;u.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:E.appId})}}},Ys),r=new Map;function o(){let u=[];for(let p of S){let E=C.get(p)??[];for(let f of E){if(f.isProxy)continue;let B=i.get(`${p.id}:${f.appId}`);if(!B)continue;for(let T of B.values())u.push({targetId:`${p.id}:${f.appId}:${T.pageId}`,source:p,appId:f.appId,appName:f.name,bundleId:f.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type})}}return u}let y=crypto.randomUUID(),n=at({brand:"",version:(u)=>({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://${u}/devtools/browser/${y}`}),listTargets:(u)=>o().map((p)=>yt({reqHost:u,id:p.targetId,description:`${p.source.label}${p.bundleId?` (${p.bundleId})`:""}`,title:p.title||p.appName,url:/^https?:/i.test(p.url)?p.url:"about:blank",type:je(p.type)}))}),F=new rt.default({noServer:!0}),O=`/devtools/browser/${y}`;n.on("upgrade",(u,p,E)=>{let f=new URL(u.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${f.pathname}`),f.pathname===O){F.handleUpgrade(u,p,E,(T)=>{Zs(T,{listEntries:()=>o().map((a)=>({targetId:a.targetId,type:je(a.type),title:a.title||a.appName,url:a.url})),createPageSession:(a,$)=>{let c=o().find((D)=>D.targetId===a);if(!c)return null;return v(c,$)}})});return}if(!f.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${f.pathname}`),p.destroy();return}let B=decodeURIComponent(f.pathname.slice(15));F.handleUpgrade(u,p,E,(T)=>{b(T,B)})});function v(u,p){let E=crypto.randomUUID(),B=new ae({readyState:1,send:($)=>p($)},u.source.wi,u.appId,u.pageId,E);ot(B),r.set(E,B);let T=!!process.env.INSPECT_WEBKIT_DEBUG,a=u.source.wi.subscribe(($)=>{if($.__selector!=="_rpc_applicationSentData:")return;let c=$.__argument;if(!c)return;if(c.WIRDestinationKey&&c.WIRDestinationKey!==E)return;if(c.WIRApplicationIdentifierKey!==u.appId)return;if(c.WIRPageIdentifierKey!==void 0&&Number(c.WIRPageIdentifierKey)!==u.pageId)return;let D=c.WIRMessageDataKey??c.WIRSocketDataKey;if(!D)return;let w=typeof D==="string"?D:new TextDecoder().decode(D);if(T)console.error(`[cdp] target>> ${w.slice(0,240)}`);B.onMessageFromTarget(w)});return u.source.wi.forwardSocketSetup(u.appId,u.pageId,E),console.error(`# devtools attached: ${u.source.label} :: ${u.appName} :: ${u.title||u.url}`),{onMessageFromTools($){if(T)console.error(`[cdp] tools>> ${$.slice(0,300)}`);B.onMessageFromTools($)},close(){a();try{B.wi.forwardDidClose(B.appId,B.pageId,B.senderKey)}catch{}r.delete(B.senderKey)}}}function b(u,p){let E=o().find((B)=>B.targetId===p);if(!E){console.error(`# ws closed: unknown target ${p} (known: ${o().map((B)=>B.targetId).join(", ")||"none"})`),u.close(1011,`unknown target ${p}`);return}let f=v(E,(B)=>{if(u.readyState===1)u.send(B)});u.on("message",(B,T)=>{let a=T?new TextDecoder().decode(B):B.toString();f.onMessageFromTools(a)}),u.on("close",()=>f.close())}return await Rt(n,t,e),ct({brand:"safari",host:t,port:e}),{stop(){clearInterval(A),F.close(),n.close();for(let u of S)try{u.wi.close(),u.lockdown?.close()}catch{}},getTargets(){return o()}}}async function ei(){let[_,e]=await Promise.all([ti(),si()]);return[..._,...e]}async function ti(){let _=[];try{_=await et()}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 tt(_.Properties.SerialNumber),t=await N_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new E_(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 si(){let _=[];try{_=await st()}catch(t){return console.error(`warn: simulator discovery: ${t.message}`),[]}return(await Promise.all(_.map(ii))).filter((t)=>t!==null)}async function ii(_){try{let{socket:e,stream:t}=await it(_.socketPath),S=new E_(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 Bt{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 Ci(_){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:(A)=>S.map((r)=>yt({reqHost:A,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",(A,r,o)=>{let y=new URL(A.url??"/","http://placeholder");if(!y.pathname.startsWith("/devtools/page/")){r.destroy();return}let n=decodeURIComponent(y.pathname.slice(15)),F=S.find((O)=>O.url===n);if(!F){r.destroy();return}s.handleUpgrade(A,r,o,(O)=>{C(O,F).catch((v)=>{console.error(`# bun attach failed: ${v.message}`);try{O.close(1011,v.message)}catch{}})})});async function C(A,r){let o=!!process.env.INSPECT_WEBKIT_DEBUG,y=new Bt(r.url);await y.ready();let n=crypto.randomUUID(),F=new ae(A,y,"bun",0,n);ot(F);let O=y.onFrame((v)=>{if(o)console.error(`[bun] target>> ${v.slice(0,240)}`);F.onMessageFromTarget(v)});A.on("message",(v,b)=>{let u=b?new TextDecoder().decode(v):v.toString();if(o)console.error(`[bun] tools>> ${u.slice(0,300)}`);F.onMessageFromTools(u)}),A.on("close",()=>{O(),y.close()}),console.error(`# devtools attached: ${r.label??r.url}`)}return await Rt(i,t,e),ct({brand:"bun",host:t,port:e}),{stop(){s.close(),i.close()},getTargets(){return S.slice()}}}async function ft(){return et()}async function ri(){let[_,e]=await Promise.all([$i(),Ai()]);return[..._.flat(),...e.flat()]}async function $i(){let _=await ft();return Promise.all(_.map(oi))}async function Ai(){let _=await st();return Promise.all(_.map(ni))}async function oi(_){let e=null;try{return e=await yi(_),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 ni(_){let e=null;try{let{socket:t,stream:S}=await it(_.socketPath);return e=new E_(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 yi(_){let e=await tt(_.Properties.SerialNumber),t=await N_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new E_(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 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 NS,VS,Ie,mS,LS,GS,MS,__=(_,e,t)=>{var S=_!=null&&typeof _==="object";if(S){var i=e?GS??=new WeakMap:MS??=new WeakMap,s=i.get(_);if(s)return s}t=_!=null?NS(VS(_)):{};let C=e||!_||!_.__esModule?Ie(t,"default",{value:_,enumerable:!0}):t;for(let A of mS(_))if(!LS.call(C,A))Ie(C,A,{get:WS.bind(_,A),enumerable:!0});if(S)i.set(_,C);return C},x=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),X,e_,g_,PS,D_,T_,Qe,Je,US,re,$e,qS,Ze,IS,XS=`<?xml version="1.0" encoding="UTF-8"?>
|
|
14
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
15
|
+
<plist version="1.0">
|
|
16
|
+
`,kS=`
|
|
17
|
+
</plist>
|
|
18
|
+
`,QS=1,JS=8,ZS="/var/run/usbmuxd",Ke=62078,z=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},lC,bC,wC,dC,gC,HC,is,rt,ze,fs,Fs,Ds,Ts,Es,ps,us,Hs=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,Ns=(_)=>_&&{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(Ns):[]},Vs,ms=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},Re=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:Ce(e.rule)})):[],Ls=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:Re(e.matches)})):[],Ws=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:s_(e.inlineStyle),matchedCSSRules:Re(e.matchedCSSRules)})):[],Ms,Us=`
|
|
19
|
+
function __sd_simulate(p){
|
|
20
|
+
var el = document.elementFromPoint(p.x, p.y);
|
|
21
|
+
if (!el) return false;
|
|
22
|
+
var ev = new MouseEvent(p.type, {
|
|
23
|
+
screenX: p.x, screenY: p.y, clientX: p.x, clientY: p.y,
|
|
24
|
+
ctrlKey: (p.modifiers & 2) === 2,
|
|
25
|
+
altKey: (p.modifiers & 1) === 1,
|
|
26
|
+
shiftKey: (p.modifiers & 8) === 8,
|
|
27
|
+
metaKey: (p.modifiers & 4) === 4,
|
|
28
|
+
button: p.button === "left" ? 0 : p.button === "middle" ? 1 : p.button === "right" ? 2 : 0,
|
|
29
|
+
bubbles: true, cancelable: true,
|
|
30
|
+
});
|
|
31
|
+
el.dispatchEvent(ev);
|
|
32
|
+
return true;
|
|
33
|
+
}`,Xs=65536,xs,zs,Qs,Ys=1500;var Tt=z_(()=>{NS=Object.create,VS=Object.getPrototypeOf,Ie=Object.defineProperty,mS=Object.getOwnPropertyNames,LS=Object.prototype.hasOwnProperty;X=hS(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:()=>{}}}),g_=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 O=0;O<o.length;O++){let v=o[O];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,O){for(let v=0;v<O;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 A(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:A,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,O,v){if(v<48)s(y,n,F,O,v);else o.mask(y,n,F,O,v)},e.exports.unmask=function(y,n){if(y.length<32)C(y,n);else o.unmask(y,n)}}catch(o){}}),PS=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}),D_=x((_,e)=>{var t=X("zlib"),S=g_(),i=PS(),{kStatusCode:s}=e_(),C=Buffer[Symbol.species],A=Buffer.from([0,0,255,255]),r=Symbol("permessage-deflate"),o=Symbol("total-length"),y=Symbol("callback"),n=Symbol("buffers"),F=Symbol("error"),O;class v{constructor(E){if(this._options=E||{},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,!O){let f=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;O=new i(f)}}static get extensionName(){return"permessage-deflate"}offer(){let E={};if(this._options.serverNoContextTakeover)E.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)E.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)E.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)E.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)E.client_max_window_bits=!0;return E}accept(E){return E=this.normalizeParams(E),this.params=this._isServer?this.acceptAsServer(E):this.acceptAsClient(E),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let E=this._deflate[y];if(this._deflate.close(),this._deflate=null,E)E(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(E){let f=this._options,B=E.find((T)=>{if(f.serverNoContextTakeover===!1&&T.server_no_context_takeover||T.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits==="number"&&f.serverMaxWindowBits>T.server_max_window_bits)||typeof f.clientMaxWindowBits==="number"&&!T.client_max_window_bits)return!1;return!0});if(!B)throw Error("None of the extension offers can be accepted");if(f.serverNoContextTakeover)B.server_no_context_takeover=!0;if(f.clientNoContextTakeover)B.client_no_context_takeover=!0;if(typeof f.serverMaxWindowBits==="number")B.server_max_window_bits=f.serverMaxWindowBits;if(typeof f.clientMaxWindowBits==="number")B.client_max_window_bits=f.clientMaxWindowBits;else if(B.client_max_window_bits===!0||f.clientMaxWindowBits===!1)delete B.client_max_window_bits;return B}acceptAsClient(E){let f=E[0];if(this._options.clientNoContextTakeover===!1&&f.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!f.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")f.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&f.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return f}normalizeParams(E){return E.forEach((f)=>{Object.keys(f).forEach((B)=>{let T=f[B];if(T.length>1)throw Error(`Parameter "${B}" must have only a single value`);if(T=T[0],B==="client_max_window_bits"){if(T!==!0){let a=+T;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${B}": ${T}`);T=a}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${B}": ${T}`)}else if(B==="server_max_window_bits"){let a=+T;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${B}": ${T}`);T=a}else if(B==="client_no_context_takeover"||B==="server_no_context_takeover"){if(T!==!0)throw TypeError(`Invalid value for parameter "${B}": ${T}`)}else throw Error(`Unknown parameter "${B}"`);f[B]=T})}),E}decompress(E,f,B){O.add((T)=>{this._decompress(E,f,(a,$)=>{T(),B(a,$)})})}compress(E,f,B){O.add((T)=>{this._compress(E,f,(a,$)=>{T(),B(a,$)})})}_decompress(E,f,B){let T=this._isServer?"client":"server";if(!this._inflate){let a=`${T}_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[o]=0,this._inflate[n]=[],this._inflate.on("error",p),this._inflate.on("data",u)}if(this._inflate[y]=B,this._inflate.write(E),f)this._inflate.write(A);this._inflate.flush(()=>{let a=this._inflate[F];if(a){this._inflate.close(),this._inflate=null,B(a);return}let $=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]=[],f&&this.params[`${T}_no_context_takeover`])this._inflate.reset();B(null,$)})}_compress(E,f,B){let T=this._isServer?"server":"client";if(!this._deflate){let a=`${T}_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[o]=0,this._deflate[n]=[],this._deflate.on("data",b)}this._deflate[y]=B,this._deflate.write(E),this._deflate.flush(t.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let a=S.concat(this._deflate[n],this._deflate[o]);if(f)a=new C(a.buffer,a.byteOffset,a.length-4);if(this._deflate[y]=null,this._deflate[o]=0,this._deflate[n]=[],f&&this.params[`${T}_no_context_takeover`])this._deflate.reset();B(null,a)})}}e.exports=v;function b(E){this[n].push(E),this[o]+=E.length}function u(E){if(this[o]+=E.length,this[r]._maxPayload<1||this[o]<=this[r]._maxPayload){this[n].push(E);return}this[F]=RangeError("Max payload size exceeded"),this[F].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[F][s]=1009,this.removeListener("data",u),this.reset()}function p(E){if(this[r]._inflate=null,this[F]){this[y](this[F]);return}E[s]=1007,this[y](E)}}),T_=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 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 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(o){return o.length<32?C(o):r(o)}}catch(r){}}),Qe=x((_,e)=>{var{Writable:t}=X("stream"),S=D_(),{BINARY_TYPES:i,EMPTY_BUFFER:s,kStatusCode:C,kWebSocket:A}=e_(),{concat:r,toArrayBuffer:o,unmask:y}=g_(),{isValidStatusCode:n,isValidUTF8:F}=T_(),O=Buffer[Symbol.species],v=0,b=1,u=2,p=3,E=4,f=5,B=6;class T 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,$,c){if(this._opcode===8&&this._state==v)return c();this._bufferedBytes+=a.length,this._buffers.push(a),this.startLoop(c)}consume(a){if(this._bufferedBytes-=a,a===this._buffers[0].length)return this._buffers.shift();if(a<this._buffers[0].length){let c=this._buffers[0];return this._buffers[0]=new O(c.buffer,c.byteOffset+a,c.length-a),new O(c.buffer,c.byteOffset,a)}let $=Buffer.allocUnsafe(a);do{let c=this._buffers[0],D=$.length-a;if(a>=c.length)$.set(this._buffers.shift(),D);else $.set(new Uint8Array(c.buffer,c.byteOffset,a),D),this._buffers[0]=new O(c.buffer,c.byteOffset+a,c.length-a);a-=c.length}while(a>0);return $}startLoop(a){this._loop=!0;do switch(this._state){case v:this.getInfo(a);break;case b:this.getPayloadLength16(a);break;case u:this.getPayloadLength64(a);break;case p:this.getMask();break;case E:this.getData(a);break;case f:case B: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 D=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");a(D);return}let c=($[0]&64)===64;if(c&&!this._extensions[S.extensionName]){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(D);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(c){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(D);return}if(!this._fragmented){let D=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");a(D);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(D);return}this._compressed=c}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let D=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");a(D);return}if(c){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(D);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let D=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");a(D);return}}else{let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(D);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let D=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");a(D);return}}else if(this._masked){let D=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");a(D);return}if(this._payloadLength===126)this._state=b;else if(this._payloadLength===127)this._state=u;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),c=$.readUInt32BE(0);if(c>Math.pow(2,21)-1){let D=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");a(D);return}this._payloadLength=c*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=p;else this._state=E}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=E}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=f,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,(D,w)=>{if(D)return $(D);if(w.length){if(this._messageLength+=w.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let d=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(d);return}this._fragments.push(w)}if(this.dataMessage($),this._state===v)this.startLoop($)})}dataMessage(a){if(!this._fin){this._state=v;return}let $=this._messageLength,c=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let D;if(this._binaryType==="nodebuffer")D=r(c,$);else if(this._binaryType==="arraybuffer")D=o(r(c,$));else if(this._binaryType==="blob")D=new Blob(c);else D=c;if(this._allowSynchronousEvents)this.emit("message",D,!0),this._state=v;else this._state=B,setImmediate(()=>{this.emit("message",D,!0),this._state=v,this.startLoop(a)})}else{let D=r(c,$);if(!this._skipUTF8Validation&&!F(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");a(w);return}if(this._state===f||this._allowSynchronousEvents)this.emit("message",D,!1),this._state=v;else this._state=B,setImmediate(()=>{this.emit("message",D,!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 c=a.readUInt16BE(0);if(!n(c)){let w=this.createError(RangeError,`invalid status code ${c}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(w);return}let D=new O(a.buffer,a.byteOffset+2,a.length-2);if(!this._skipUTF8Validation&&!F(D)){let w=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(w);return}this._loop=!1,this.emit("conclude",c,D),this.end()}this._state=v;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",a),this._state=v;else this._state=B,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",a),this._state=v,this.startLoop($)})}createError(a,$,c,D,w){this._loop=!1,this._errored=!0;let d=new a(c?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(d,this.createError),d.code=w,d[C]=D,d}}e.exports=T}),Je=x((_,e)=>{var{Duplex:t}=X("stream"),{randomFillSync:S}=X("crypto"),i=D_(),{EMPTY_BUFFER:s,kWebSocket:C,NOOP:A}=e_(),{isBlob:r,isValidStatusCode:o}=T_(),{mask:y,toBuffer:n}=g_(),F=Symbol("kByteLength"),O=Buffer.alloc(4),v=8192,b,u=v,p=0,E=1,f=2;class B{constructor($,c,D){if(this._extensions=c||{},D)this._generateMask=D,this._maskBuffer=Buffer.alloc(4);this._socket=$,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=p,this.onerror=A,this[C]=void 0}static frame($,c){let D,w=!1,d=2,V=!1;if(c.mask){if(D=c.maskBuffer||O,c.generateMask)c.generateMask(D);else{if(u===v){if(b===void 0)b=Buffer.alloc(v);S(b,0,v),u=0}D[0]=b[u++],D[1]=b[u++],D[2]=b[u++],D[3]=b[u++]}V=(D[0]|D[1]|D[2]|D[3])===0,d=6}let m;if(typeof $==="string")if((!c.mask||V)&&c[F]!==void 0)m=c[F];else $=Buffer.from($),m=$.length;else m=$.length,w=c.mask&&c.readOnly&&!V;let U=m;if(m>=65536)d+=8,U=127;else if(m>125)d+=2,U=126;let L=Buffer.allocUnsafe(w?m+d:d);if(L[0]=c.fin?c.opcode|128:c.opcode,c.rsv1)L[0]|=64;if(L[1]=U,U===126)L.writeUInt16BE(m,2);else if(U===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!c.mask)return[L,$];if(L[1]|=128,L[d-4]=D[0],L[d-3]=D[1],L[d-2]=D[2],L[d-1]=D[3],V)return[L,$];if(w)return y($,D,L,d,m),[L];return y($,D,$,0,m),[L,$]}close($,c,D,w){let d;if($===void 0)d=s;else if(typeof $!=="number"||!o($))throw TypeError("First argument must be a valid error code number");else if(c===void 0||!c.length)d=Buffer.allocUnsafe(2),d.writeUInt16BE($,0);else{let m=Buffer.byteLength(c);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(d=Buffer.allocUnsafe(2+m),d.writeUInt16BE($,0),typeof c==="string")d.write(c,2);else d.set(c,2)}let V={[F]:d.length,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==p)this.enqueue([this.dispatch,d,!1,V,w]);else this.sendFrame(B.frame(d,V),w)}ping($,c,D){let w,d;if(typeof $==="string")w=Buffer.byteLength($),d=!1;else if(r($))w=$.size,d=!1;else $=n($),w=$.length,d=n.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[F]:w,fin:!0,generateMask:this._generateMask,mask:c,maskBuffer:this._maskBuffer,opcode:9,readOnly:d,rsv1:!1};if(r($))if(this._state!==p)this.enqueue([this.getBlobData,$,!1,V,D]);else this.getBlobData($,!1,V,D);else if(this._state!==p)this.enqueue([this.dispatch,$,!1,V,D]);else this.sendFrame(B.frame($,V),D)}pong($,c,D){let w,d;if(typeof $==="string")w=Buffer.byteLength($),d=!1;else if(r($))w=$.size,d=!1;else $=n($),w=$.length,d=n.readOnly;if(w>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[F]:w,fin:!0,generateMask:this._generateMask,mask:c,maskBuffer:this._maskBuffer,opcode:10,readOnly:d,rsv1:!1};if(r($))if(this._state!==p)this.enqueue([this.getBlobData,$,!1,V,D]);else this.getBlobData($,!1,V,D);else if(this._state!==p)this.enqueue([this.dispatch,$,!1,V,D]);else this.sendFrame(B.frame($,V),D)}send($,c,D){let w=this._extensions[i.extensionName],d=c.binary?2:1,V=c.compress,m,U;if(typeof $==="string")m=Buffer.byteLength($),U=!1;else if(r($))m=$.size,U=!1;else $=n($),m=$.length,U=n.readOnly;if(this._firstFragment){if(this._firstFragment=!1,V&&w&&w.params[w._isServer?"server_no_context_takeover":"client_no_context_takeover"])V=m>=w._threshold;this._compress=V}else V=!1,d=0;if(c.fin)this._firstFragment=!0;let L={[F]:m,fin:c.fin,generateMask:this._generateMask,mask:c.mask,maskBuffer:this._maskBuffer,opcode:d,readOnly:U,rsv1:V};if(r($))if(this._state!==p)this.enqueue([this.getBlobData,$,this._compress,L,D]);else this.getBlobData($,this._compress,L,D);else if(this._state!==p)this.enqueue([this.dispatch,$,this._compress,L,D]);else this.dispatch($,this._compress,L,D)}getBlobData($,c,D,w){this._bufferedBytes+=D[F],this._state=f,$.arrayBuffer().then((d)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(T,this,m,w);return}this._bufferedBytes-=D[F];let V=n(d);if(!c)this._state=p,this.sendFrame(B.frame(V,D),w),this.dequeue();else this.dispatch(V,c,D,w)}).catch((d)=>{process.nextTick(a,this,d,w)})}dispatch($,c,D,w){if(!c){this.sendFrame(B.frame($,D),w);return}let d=this._extensions[i.extensionName];this._bufferedBytes+=D[F],this._state=E,d.compress($,D.fin,(V,m)=>{if(this._socket.destroyed){let U=Error("The socket was closed while data was being compressed");T(this,U,w);return}this._bufferedBytes-=D[F],this._state=p,D.readOnly=!1,this.sendFrame(B.frame(m,D),w),this.dequeue()})}dequeue(){while(this._state===p&&this._queue.length){let $=this._queue.shift();this._bufferedBytes-=$[3][F],Reflect.apply($[0],this,$.slice(1))}}enqueue($){this._bufferedBytes+=$[3][F],this._queue.push($)}sendFrame($,c){if($.length===2)this._socket.cork(),this._socket.write($[0]),this._socket.write($[1],c),this._socket.uncork();else this._socket.write($[0],c)}}e.exports=B;function T($,c,D){if(typeof D==="function")D(c);for(let w=0;w<$._queue.length;w++){let d=$._queue[w],V=d[d.length-1];if(typeof V==="function")V(c)}}function a($,c,D){T($,c,D),$.onerror(c)}}),US=x((_,e)=>{var{kForOnEventAttribute:t,kListener:S}=e_(),i=Symbol("kCode"),s=Symbol("kData"),C=Symbol("kError"),A=Symbol("kMessage"),r=Symbol("kReason"),o=Symbol("kTarget"),y=Symbol("kType"),n=Symbol("kWasClean");class F{constructor(E){this[o]=null,this[y]=E}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 O extends F{constructor(E,f={}){super(E);this[i]=f.code===void 0?0:f.code,this[r]=f.reason===void 0?"":f.reason,this[n]=f.wasClean===void 0?!1:f.wasClean}get code(){return this[i]}get reason(){return this[r]}get wasClean(){return this[n]}}Object.defineProperty(O.prototype,"code",{enumerable:!0}),Object.defineProperty(O.prototype,"reason",{enumerable:!0}),Object.defineProperty(O.prototype,"wasClean",{enumerable:!0});class v extends F{constructor(E,f={}){super(E);this[C]=f.error===void 0?null:f.error,this[A]=f.message===void 0?"":f.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 b extends F{constructor(E,f={}){super(E);this[s]=f.data===void 0?null:f.data}get data(){return this[s]}}Object.defineProperty(b.prototype,"data",{enumerable:!0});var u={addEventListener(E,f,B={}){for(let a of this.listeners(E))if(!B[t]&&a[S]===f&&!a[t])return;let T;if(E==="message")T=function($,c){let D=new b("message",{data:c?$:$.toString()});D[o]=this,p(f,this,D)};else if(E==="close")T=function($,c){let D=new O("close",{code:$,reason:c.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});D[o]=this,p(f,this,D)};else if(E==="error")T=function($){let c=new v("error",{error:$,message:$.message});c[o]=this,p(f,this,c)};else if(E==="open")T=function(){let $=new F("open");$[o]=this,p(f,this,$)};else return;if(T[t]=!!B[t],T[S]=f,B.once)this.once(E,T);else this.on(E,T)},removeEventListener(E,f){for(let B of this.listeners(E))if(B[S]===f&&!B[t]){this.removeListener(E,B);break}}};e.exports={CloseEvent:O,ErrorEvent:v,Event:F,EventTarget:u,MessageEvent:b};function p(E,f,B){if(typeof E==="object"&&E.handleEvent)E.handleEvent.call(E,B);else E.call(f,B)}}),re=x((_,e)=>{var{tokenChars:t}=T_();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),o=!1,y=!1,n=!1,F,O,v=-1,b=-1,u=-1,p=0;for(;p<C.length;p++)if(b=C.charCodeAt(p),F===void 0)if(u===-1&&t[b]===1){if(v===-1)v=p}else if(p!==0&&(b===32||b===9)){if(u===-1&&v!==-1)u=p}else if(b===59||b===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${p}`);if(u===-1)u=p;let f=C.slice(v,u);if(b===44)S(A,f,r),r=Object.create(null);else F=f;v=u=-1}else throw SyntaxError(`Unexpected character at index ${p}`);else if(O===void 0)if(u===-1&&t[b]===1){if(v===-1)v=p}else if(b===32||b===9){if(u===-1&&v!==-1)u=p}else if(b===59||b===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${p}`);if(u===-1)u=p;if(S(r,C.slice(v,u),!0),b===44)S(A,F,r),r=Object.create(null),F=void 0;v=u=-1}else if(b===61&&v!==-1&&u===-1)O=C.slice(v,p),v=u=-1;else throw SyntaxError(`Unexpected character at index ${p}`);else if(y){if(t[b]!==1)throw SyntaxError(`Unexpected character at index ${p}`);if(v===-1)v=p;else if(!o)o=!0;y=!1}else if(n)if(t[b]===1){if(v===-1)v=p}else if(b===34&&v!==-1)n=!1,u=p;else if(b===92)y=!0;else throw SyntaxError(`Unexpected character at index ${p}`);else if(b===34&&C.charCodeAt(p-1)===61)n=!0;else if(u===-1&&t[b]===1){if(v===-1)v=p}else if(v!==-1&&(b===32||b===9)){if(u===-1)u=p}else if(b===59||b===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${p}`);if(u===-1)u=p;let f=C.slice(v,u);if(o)f=f.replace(/\\/g,""),o=!1;if(S(r,O,f),b===44)S(A,F,r),r=Object.create(null),F=void 0;O=void 0,v=u=-1}else throw SyntaxError(`Unexpected character at index ${p}`);if(v===-1||n||b===32||b===9)throw SyntaxError("Unexpected end of input");if(u===-1)u=p;let E=C.slice(v,u);if(F===void 0)S(A,E,r);else{if(O===void 0)S(r,E,!0);else if(o)S(r,O,E.replace(/\\/g,""));else S(r,O,E);S(A,F,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((o)=>{return[A].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=X("events"),S=X("https"),i=X("http"),s=X("net"),C=X("tls"),{randomBytes:A,createHash:r}=X("crypto"),{Duplex:o,Readable:y}=X("stream"),{URL:n}=X("url"),F=D_(),O=Qe(),v=Je(),{isBlob:b}=T_(),{BINARY_TYPES:u,CLOSE_TIMEOUT:p,EMPTY_BUFFER:E,GUID:f,kForOnEventAttribute:B,kListener:T,kStatusCode:a,kWebSocket:$,NOOP:c}=e_(),{EventTarget:{addEventListener:D,removeEventListener:w}}=US(),{format:d,parse:V}=re(),{toBuffer:m}=g_(),U=Symbol("kAborted"),L=[8,13],P=["CONNECTING","OPEN","CLOSING","CLOSED"],Q=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends t{constructor(R,l,h){super();if(this._binaryType=u[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=E,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,R!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)h=l,l=[];else l=[l];Z(this,R,l,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(R){if(!u.includes(R))return;if(this._binaryType=R,this._receiver)this._receiver._binaryType=R}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(R,l,h){let W=new O({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),H=new v(R,this._extensions,h.generateMask);if(this._receiver=W,this._sender=H,this._socket=R,W[$]=this,H[$]=this,R[$]=this,W.on("conclude",Qt),W.on("drain",Jt),W.on("error",Zt),W.on("message",Yt),W.on("ping",_S),W.on("pong",eS),H.onerror=tS,R.setTimeout)R.setTimeout(0);if(R.setNoDelay)R.setNoDelay();if(l.length>0)R.unshift(l);R.on("close",be),R.on("data",O_),R.on("end",we),R.on("error",de),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[F.extensionName])this._extensions[F.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(R,l){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(R,l,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),le(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(R,l,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=l=void 0;else if(typeof l==="function")h=l,l=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){k_(this,R,h);return}if(l===void 0)l=!this._isServer;this._sender.ping(R||E,l,h)}pong(R,l,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=l=void 0;else if(typeof l==="function")h=l,l=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){k_(this,R,h);return}if(l===void 0)l=!this._isServer;this._sender.pong(R||E,l,h)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(R,l,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")h=l,l={};if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){k_(this,R,h);return}let W={binary:typeof R!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[F.extensionName])W.compress=!1;this._sender.send(R||E,W,h)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:P.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:P.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:P.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:P.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((R)=>{Object.defineProperty(g.prototype,R,{enumerable:!0})}),["open","error","close","message"].forEach((R)=>{Object.defineProperty(g.prototype,`on${R}`,{enumerable:!0,get(){for(let l of this.listeners(R))if(l[B])return l[T];return null},set(l){for(let h of this.listeners(R))if(h[B]){this.removeListener(R,h);break}if(typeof l!=="function")return;this.addEventListener(R,l,{[B]:!0})}})}),g.prototype.addEventListener=D,g.prototype.removeEventListener=w,e.exports=g;function Z(R,l,h,W){let H={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:p,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(R._autoPong=H.autoPong,R._closeTimeout=H.closeTimeout,!L.includes(H.protocolVersion))throw RangeError(`Unsupported protocol version: ${H.protocolVersion} (supported versions: ${L.join(", ")})`);let M;if(l instanceof n)M=l;else try{M=new n(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(M.protocol==="http:")M.protocol="ws:";else if(M.protocol==="https:")M.protocol="wss:";R._url=M.href;let r_=M.protocol==="wss:",$_=M.protocol==="ws+unix:",R_;if(M.protocol!=="ws:"&&!r_&&!$_)R_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if($_&&!M.pathname)R_="The URL's pathname is empty";else if(M.hash)R_="The URL contains a fragment identifier";if(R_){let G=SyntaxError(R_);if(R._redirects===0)throw G;else{t_(R,G);return}}let ge=r_?443:80,He=A(16).toString("base64"),he=r_?S.request:i.request,c_=new Set,B_;if(H.createConnection=H.createConnection||(r_?X_:I_),H.defaultPort=H.defaultPort||ge,H.port=M.port||ge,H.host=M.hostname.startsWith("[")?M.hostname.slice(1,-1):M.hostname,H.headers={...H.headers,"Sec-WebSocket-Version":H.protocolVersion,"Sec-WebSocket-Key":He,Connection:"Upgrade",Upgrade:"websocket"},H.path=M.pathname+M.search,H.timeout=H.handshakeTimeout,H.perMessageDeflate)B_=new F({...H.perMessageDeflate,isServer:!1,maxPayload:H.maxPayload}),H.headers["Sec-WebSocket-Extensions"]=d({[F.extensionName]:B_.offer()});if(h.length){for(let G of h){if(typeof G!=="string"||!Q.test(G)||c_.has(G))throw SyntaxError("An invalid or duplicated subprotocol was specified");c_.add(G)}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($_){let G=H.path.split(":");H.socketPath=G[0],H.path=G[1]}let I;if(H.followRedirects){if(R._redirects===0){R._originalIpc=$_,R._originalSecure=r_,R._originalHostOrSocketPath=$_?H.socketPath:M.host;let G=W&&W.headers;if(W={...W,headers:{}},G)for(let[k,A_]of Object.entries(G))W.headers[k.toLowerCase()]=A_}else if(R.listenerCount("redirect")===0){let G=$_?R._originalIpc?H.socketPath===R._originalHostOrSocketPath:!1:R._originalIpc?!1:M.host===R._originalHostOrSocketPath;if(!G||R._originalSecure&&!r_){if(delete H.headers.authorization,delete H.headers.cookie,!G)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(I=R._req=he(H),R._redirects)R.emit("redirect",R.url,I)}else I=R._req=he(H);if(H.timeout)I.on("timeout",()=>{K(R,I,"Opening handshake has timed out")});if(I.on("error",(G)=>{if(I===null||I[U])return;I=R._req=null,t_(R,G)}),I.on("response",(G)=>{let k=G.headers.location,A_=G.statusCode;if(k&&H.followRedirects&&A_>=300&&A_<400){if(++R._redirects>H.maxRedirects){K(R,I,"Maximum redirects exceeded");return}I.abort();let f_;try{f_=new n(k,l)}catch(Ne){let o_=SyntaxError(`Invalid URL: ${k}`);t_(R,o_);return}Z(R,f_,h,W)}else if(!R.emit("unexpected-response",I,G))K(R,I,`Unexpected server response: ${G.statusCode}`)}),I.on("upgrade",(G,k,A_)=>{if(R.emit("upgrade",G),R.readyState!==g.CONNECTING)return;I=R._req=null;let f_=G.headers.upgrade;if(f_===void 0||f_.toLowerCase()!=="websocket"){K(R,k,"Invalid Upgrade header");return}let Ne=r("sha1").update(He+f).digest("base64");if(G.headers["sec-websocket-accept"]!==Ne){K(R,k,"Invalid Sec-WebSocket-Accept header");return}let o_=G.headers["sec-websocket-protocol"],F_;if(o_!==void 0){if(!c_.size)F_="Server sent a subprotocol but none was requested";else if(!c_.has(o_))F_="Server sent an invalid subprotocol"}else if(c_.size)F_="Server sent no subprotocol";if(F_){K(R,k,F_);return}if(o_)R._protocol=o_;let Ve=G.headers["sec-websocket-extensions"];if(Ve!==void 0){if(!B_){K(R,k,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let K_;try{K_=V(Ve)}catch(x_){K(R,k,"Invalid Sec-WebSocket-Extensions header");return}let me=Object.keys(K_);if(me.length!==1||me[0]!==F.extensionName){K(R,k,"Server indicated an extension that was not requested");return}try{B_.accept(K_[F.extensionName])}catch(x_){K(R,k,"Invalid Sec-WebSocket-Extensions header");return}R._extensions[F.extensionName]=B_}R.setSocket(k,A_,{allowSynchronousEvents:H.allowSynchronousEvents,generateMask:H.generateMask,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation})}),H.finishRequest)H.finishRequest(I,R);else I.end()}function t_(R,l){R._readyState=g.CLOSING,R._errorEmitted=!0,R.emit("error",l),R.emitClose()}function I_(R){return R.path=R.socketPath,s.connect(R)}function X_(R){if(R.path=void 0,!R.servername&&R.servername!=="")R.servername=s.isIP(R.host)?"":R.host;return C.connect(R)}function K(R,l,h){R._readyState=g.CLOSING;let W=Error(h);if(Error.captureStackTrace(W,K),l.setHeader){if(l[U]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick(t_,R,W)}else l.destroy(W),l.once("error",R.emit.bind(R,"error")),l.once("close",R.emitClose.bind(R))}function k_(R,l,h){if(l){let W=b(l)?l.size:m(l).length;if(R._socket)R._sender._bufferedBytes+=W;else R._bufferedAmount+=W}if(h){let W=Error(`WebSocket is not open: readyState ${R.readyState} (${P[R.readyState]})`);process.nextTick(h,W)}}function Qt(R,l){let h=this[$];if(h._closeFrameReceived=!0,h._closeMessage=l,h._closeCode=R,h._socket[$]===void 0)return;if(h._socket.removeListener("data",O_),process.nextTick(Oe,h._socket),R===1005)h.close();else h.close(R,l)}function Jt(){let R=this[$];if(!R.isPaused)R._socket.resume()}function Zt(R){let l=this[$];if(l._socket[$]!==void 0)l._socket.removeListener("data",O_),process.nextTick(Oe,l._socket),l.close(R[a]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",R)}function ve(){this[$].emitClose()}function Yt(R,l){this[$].emit("message",R,l)}function _S(R){let l=this[$];if(l._autoPong)l.pong(R,!this._isServer,c);l.emit("ping",R)}function eS(R){this[$].emit("pong",R)}function Oe(R){R.resume()}function tS(R){let l=this[$];if(l.readyState===g.CLOSED)return;if(l.readyState===g.OPEN)l._readyState=g.CLOSING,le(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",R)}function le(R){R._closeTimer=setTimeout(R._socket.destroy.bind(R._socket),R._closeTimeout)}function be(){let R=this[$];if(this.removeListener("close",be),this.removeListener("data",O_),this.removeListener("end",we),R._readyState=g.CLOSING,!this._readableState.endEmitted&&!R._closeFrameReceived&&!R._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);R._receiver.write(l)}if(R._receiver.end(),this[$]=void 0,clearTimeout(R._closeTimer),R._receiver._writableState.finished||R._receiver._writableState.errorEmitted)R.emitClose();else R._receiver.on("error",ve),R._receiver.on("finish",ve)}function O_(R){if(!this[$]._receiver.write(R))this.pause()}function we(){let R=this[$];R._readyState=g.CLOSING,R._receiver.end(),this.end()}function de(){let R=this[$];if(this.removeListener("error",de),this.on("error",c),R)R._readyState=g.CLOSING,this.destroy()}}),qS=x((_,e)=>{var t=$e(),{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,o){let y=!0,n=new S({...o,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(O,v){let b=!v&&n._readableState.objectMode?O.toString():O;if(!n.push(b))r.pause()}),r.once("error",function(O){if(n.destroyed)return;y=!1,n.destroy(O)}),r.once("close",function(){if(n.destroyed)return;n.push(null)}),n._destroy=function(F,O){if(r.readyState===r.CLOSED){O(F),process.nextTick(i,n);return}let v=!1;if(r.once("error",function(u){v=!0,O(u)}),r.once("close",function(){if(!v)O(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,O,v){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(F,O,v)});return}r.send(F,v)},n.on("end",s),n.on("error",C),n}e.exports=A}),Ze=x((_,e)=>{var{tokenChars:t}=T_();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 n=i.slice(C,A);if(s.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);s.add(n),C=A=-1}else throw SyntaxError(`Unexpected character at index ${r}`)}if(C===-1||A!==-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}}),IS=x((_,e)=>{var t=X("events"),S=X("http"),{Duplex:i}=X("stream"),{createHash:s}=X("crypto"),C=re(),A=D_(),r=Ze(),o=$e(),{CLOSE_TIMEOUT:y,GUID:n,kWebSocket:F}=e_(),O=/^[+/0-9A-Za-z]{22}==$/,v=0,b=1,u=2;class p extends t{constructor($,c){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:o,...$},$.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((D,w)=>{let d=S.STATUS_CODES[426];w.writeHead(426,{"Content-Length":d.length,"Content-Type":"text/plain"}),w.end(d)}),this._server.listen($.port,$.host,$.backlog,c);else if($.server)this._server=$.server;if(this._server){let D=this.emit.bind(this,"connection");this._removeListeners=E(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(w,d,V)=>{this.handleUpgrade(w,d,V,D)}})}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===u){if($)this.once("close",()=>{$(Error("The server is not running"))});process.nextTick(f,this);return}if($)this.once("close",$);if(this._state===b)return;if(this._state=b,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(f,this);else this._shouldEmitClose=!0;else process.nextTick(f,this)}else{let c=this._server;this._removeListeners(),this._removeListeners=this._server=null,c.close(()=>{f(this)})}}shouldHandle($){if(this.options.path){let c=$.url.indexOf("?");if((c!==-1?$.url.slice(0,c):$.url)!==this.options.path)return!1}return!0}handleUpgrade($,c,D,w){c.on("error",B);let d=$.headers["sec-websocket-key"],V=$.headers.upgrade,m=+$.headers["sec-websocket-version"];if($.method!=="GET"){a(this,$,c,405,"Invalid HTTP method");return}if(V===void 0||V.toLowerCase()!=="websocket"){a(this,$,c,400,"Invalid Upgrade header");return}if(d===void 0||!O.test(d)){a(this,$,c,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){a(this,$,c,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle($)){T(c,400);return}let U=$.headers["sec-websocket-protocol"],L=new Set;if(U!==void 0)try{L=r.parse(U)}catch(g){a(this,$,c,400,"Invalid Sec-WebSocket-Protocol header");return}let P=$.headers["sec-websocket-extensions"],Q={};if(this.options.perMessageDeflate&&P!==void 0){let g=new A({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let Z=C.parse(P);if(Z[A.extensionName])g.accept(Z[A.extensionName]),Q[A.extensionName]=g}catch(Z){a(this,$,c,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:$.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!($.socket.authorized||$.socket.encrypted),req:$};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(Z,t_,I_,X_)=>{if(!Z)return T(c,t_||401,I_,X_);this.completeUpgrade(Q,d,L,$,c,D,w)});return}if(!this.options.verifyClient(g))return T(c,401)}this.completeUpgrade(Q,d,L,$,c,D,w)}completeUpgrade($,c,D,w,d,V,m){if(!d.readable||!d.writable)return d.destroy();if(d[F])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>v)return T(d,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${s("sha1").update(c+n).digest("base64")}`],P=new this.options.WebSocket(null,void 0,this.options);if(D.size){let Q=this.options.handleProtocols?this.options.handleProtocols(D,w):D.values().next().value;if(Q)L.push(`Sec-WebSocket-Protocol: ${Q}`),P._protocol=Q}if($[A.extensionName]){let Q=$[A.extensionName].params,g=C.format({[A.extensionName]:[Q]});L.push(`Sec-WebSocket-Extensions: ${g}`),P._extensions=$}if(this.emit("headers",L,w),d.write(L.concat(`\r
|
|
34
|
+
`).join(`\r
|
|
35
|
+
`)),d.removeListener("error",B),P.setSocket(d,V,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(P),P.on("close",()=>{if(this.clients.delete(P),this._shouldEmitClose&&!this.clients.size)process.nextTick(f,this)});m(P,w)}}e.exports=p;function E($,c){for(let D of Object.keys(c))$.on(D,c[D]);return function(){for(let w of Object.keys(c))$.removeListener(w,c[w])}}function f($){$._state=u,$.emit("close")}function B(){this.destroy()}function T($,c,D,w){D=D||S.STATUS_CODES[c],w={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(D),...w},$.once("finish",$.destroy),$.end(`HTTP/1.1 ${c} ${S.STATUS_CODES[c]}\r
|
|
36
|
+
`+Object.keys(w).map((d)=>`${d}: ${w[d]}`).join(`\r
|
|
37
|
+
`)+`\r
|
|
38
|
+
\r
|
|
39
|
+
`+D)}function a($,c,D,w,d,V){if($.listenerCount("wsClientError")){let m=Error(d);Error.captureStackTrace(m,a),$.emit("wsClientError",m,D,c)}else T(D,w,d,V)}});lC=__(qS(),1),bC=__(re(),1),wC=__(D_(),1),dC=__(Qe(),1),gC=__(Je(),1),HC=__(Ze(),1),is=__($e(),1),rt=__(IS(),1),ze=is.default;fs={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Fs={"Network.requestWillBeSent":{walltime:"wallTime"}},Ds={hasUserGesture:!1,redirectHasExtraInfo:!1},Ts={hasExtraInfo:!1},Es={encodedDataLength:0,shouldReportCorbBlocking:!1},ps={initialPriority:"Medium",referrerPolicy:"origin"},us={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};Vs={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Ms={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"],zs={"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:[]}};Qs={"&":"&","<":"<",">":">",'"':""","'":"'"}});var Ot={};Le(Ot,{simMiddleware:()=>Vi,selectServeSimState:()=>C_});import{readdirSync as ai,readFileSync as Ri,existsSync as ci,unlinkSync as Et}from"fs";import{execSync as Bi,spawn as pt,exec as fi,execFile as Fi}from"child_process";import{tmpdir as Di}from"os";import{join as fe}from"path";import{createServer as Ti}from"net";function li(_){return!Oi.test(_)}function bi(_,e){if(ui.has(e))return Promise.resolve(!0);return new Promise((t)=>{Fi("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 vi)if(ci(fe(s,C)))return t(!0);t(!1)})})}function wi(){let _=Date.now();if(m_.booted&&_-m_.at<1500)return m_.booted;try{let e=Bi("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 a_(){let _;try{_=ai(ut).filter((S)=>S.startsWith("server-")&&S.endsWith(".json"))}catch{return[]}let e=wi(),t=[];for(let S of _){let i=fe(ut,S);try{let s=JSON.parse(Ri(i,"utf-8"));try{process.kill(s.pid,0)}catch{try{Et(i)}catch{}continue}if(e&&!e.has(s.device)){try{process.kill(s.pid,"SIGTERM")}catch{}try{Et(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 di(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function L_(_,e,t){return`${`${_}${e}`}?device=${encodeURIComponent(t)}`}async function gi(_){return new Promise((e)=>{let t=Ti();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_,"localhost")})}async function vt(_){let e=`http://localhost:${_}`;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 ce(){if(i_)try{return await(await i_).listTargets(),i_}catch{i_=null}return i_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Tt(),Dt));for(let e=V_;e<V_+50;e++){if(!await gi(e)){let t=await vt(e);if(t)return t;continue}try{let t=await _({host:"localhost",port:e});return{port:e,cdpUrl:`http://localhost:${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 ${V_}-${V_+49}`)})().catch((_)=>{throw i_=null,_}),i_}function Hi(_,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 hi(_,e){let t=(_??"localhost").split(":")[0];return`${t==="localhost"||t==="127.0.0.1"||t==="::1"?t:"localhost"}:${e}`}function Ni(){if(!Be)Be=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBPMSxJLEE5LGw4LGIwLFU5LHc5LEk5LGYxLEgxLGUwLGs5LGExLGQxLHUxLFQ5LEYxPXt9LEQxPVtdLG84PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksWDE9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBNMChYLEcpe2Zvcih2YXIgSiBpbiBHKVhbSl09R1tKXTtyZXR1cm4gWH1mdW5jdGlvbiBsMShYKXtYJiZYLnBhcmVudE5vZGUmJlgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChYKX1mdW5jdGlvbiBPMChYLEcsSil7dmFyIFkscSxaLCQ9e307Zm9yKFogaW4gRylaPT0ia2V5Ij9ZPUdbWl06Wj09InJlZiI/cT1HW1pdOiRbWl09R1taXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJigkLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9PMS5jYWxsKGFyZ3VtZW50cywyKTpKKSx0eXBlb2YgWD09ImZ1bmN0aW9uIiYmWC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFogaW4gWC5kZWZhdWx0UHJvcHMpJFtaXT09PXZvaWQgMCYmKCRbWl09WC5kZWZhdWx0UHJvcHNbWl0pO3JldHVybiBCMShYLCQsWSxxLG51bGwpfWZ1bmN0aW9uIEIxKFgsRyxKLFkscSl7dmFyIFo9e3R5cGU6WCxwcm9wczpHLGtleTpKLHJlZjpZLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpxPT1udWxsPysrQTk6cSxfX2k6LTEsX191OjB9O3JldHVybiBxPT1udWxsJiZJLnZub2RlIT1udWxsJiZJLnZub2RlKFopLFp9ZnVuY3Rpb24gYShYKXtyZXR1cm4gWC5jaGlsZHJlbn1mdW5jdGlvbiBlKFgsRyl7dGhpcy5wcm9wcz1YLHRoaXMuY29udGV4dD1HfWZ1bmN0aW9uIGMwKFgsRyl7aWYoRz09bnVsbClyZXR1cm4gWC5fXz9jMChYLl9fLFguX19pKzEpOm51bGw7Zm9yKHZhciBKO0c8WC5fX2subGVuZ3RoO0crKylpZigoSj1YLl9fa1tHXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mIFgudHlwZT09ImZ1bmN0aW9uIj9jMChYKTpudWxsfWZ1bmN0aW9uIHI4KFgpe2lmKFguX19QJiZYLl9fZCl7dmFyIEc9WC5fX3YsSj1HLl9fZSxZPVtdLHE9W10sWj1NMCh7fSxHKTtaLl9fdj1HLl9fdisxLEkudm5vZGUmJkkudm5vZGUoWiksbzEoWC5fX1AsWixHLFguX19uLFguX19QLm5hbWVzcGFjZVVSSSwzMiZHLl9fdT9bSl06bnVsbCxZLEo9PW51bGw/YzAoRyk6SiwhISgzMiZHLl9fdSkscSksWi5fX3Y9Ry5fX3YsWi5fXy5fX2tbWi5fX2ldPVosYjkoWSxaLHEpLEcuX19lPUcuX189bnVsbCxaLl9fZSE9SiYmRTkoWil9fWZ1bmN0aW9uIEU5KFgpe2lmKChYPVguX18pIT1udWxsJiZYLl9fYyE9bnVsbClyZXR1cm4gWC5fX2U9WC5fX2MuYmFzZT1udWxsLFguX19rLnNvbWUoZnVuY3Rpb24oRyl7aWYoRyE9bnVsbCYmRy5fX2UhPW51bGwpcmV0dXJuIFguX19lPVguX19jLmJhc2U9Ry5fX2V9KSxFOShYKX1mdW5jdGlvbiBjMShYKXsoIVguX19kJiYoWC5fX2Q9ITApJiZiMC5wdXNoKFgpJiYhTjEuX19yKyt8fFU5IT1JLmRlYm91bmNlUmVuZGVyaW5nKSYmKChVOT1JLmRlYm91bmNlUmVuZGVyaW5nKXx8dzkpKE4xKX1mdW5jdGlvbiBOMSgpe3RyeXtmb3IodmFyIFgsRz0xO2IwLmxlbmd0aDspYjAubGVuZ3RoPkcmJmIwLnNvcnQoSTkpLFg9YjAuc2hpZnQoKSxHPWIwLmxlbmd0aCxyOChYKX1maW5hbGx5e2IwLmxlbmd0aD1OMS5fX3I9MH19ZnVuY3Rpb24gQzkoWCxHLEosWSxxLFosJCxWLEssXyxIKXt2YXIgeixMLEIsTSxOLE8sUCxBPVkmJlkuX19rfHxEMSx2PUcubGVuZ3RoO2ZvcihLPXM4KEosRyxBLEssdiksej0wO3o8djt6KyspKEI9Si5fX2tbel0pIT1udWxsJiYoTD1CLl9faSE9LTEmJkFbQi5fX2ldfHxGMSxCLl9faT16LE89bzEoWCxCLEwscSxaLCQsVixLLF8sSCksTT1CLl9fZSxCLnJlZiYmTC5yZWYhPUIucmVmJiYoTC5yZWYmJnIxKEwucmVmLG51bGwsQiksSC5wdXNoKEIucmVmLEIuX19jfHxNLEIpKSxOPT1udWxsJiZNIT1udWxsJiYoTj1NKSwoUD0hISg0JkIuX191KSl8fEwuX19rPT09Qi5fX2s/KEs9UjkoQixLLFgsUCksUCYmTC5fX2UmJihMLl9fZT1udWxsKSk6dHlwZW9mIEIudHlwZT09ImZ1bmN0aW9uIiYmTyE9PXZvaWQgMD9LPU86TSYmKEs9TS5uZXh0U2libGluZyksQi5fX3UmPS03KTtyZXR1cm4gSi5fX2U9TixLfWZ1bmN0aW9uIHM4KFgsRyxKLFkscSl7dmFyIFosJCxWLEssXyxIPUoubGVuZ3RoLHo9SCxMPTA7Zm9yKFguX19rPUFycmF5KHEpLFo9MDtaPHE7WisrKSgkPUdbWl0pIT1udWxsJiZ0eXBlb2YgJCE9ImJvb2xlYW4iJiZ0eXBlb2YgJCE9ImZ1bmN0aW9uIj8odHlwZW9mICQ9PSJzdHJpbmcifHx0eXBlb2YgJD09Im51bWJlciJ8fHR5cGVvZiAkPT0iYmlnaW50Inx8JC5jb25zdHJ1Y3Rvcj09U3RyaW5nPyQ9WC5fX2tbWl09QjEobnVsbCwkLG51bGwsbnVsbCxudWxsKTpYMSgkKT8kPVguX19rW1pdPUIxKGEse2NoaWxkcmVuOiR9LG51bGwsbnVsbCxudWxsKTokLmNvbnN0cnVjdG9yPT09dm9pZCAwJiYkLl9fYj4wPyQ9WC5fX2tbWl09QjEoJC50eXBlLCQucHJvcHMsJC5rZXksJC5yZWY/JC5yZWY6bnVsbCwkLl9fdik6WC5fX2tbWl09JCxLPVorTCwkLl9fPVgsJC5fX2I9WC5fX2IrMSxWPW51bGwsKF89JC5fX2k9dDgoJCxKLEsseikpIT0tMSYmKHotLSwoVj1KW19dKSYmKFYuX191fD0yKSksVj09bnVsbHx8Vi5fX3Y9PW51bGw/KF89PS0xJiYocT5IP0wtLTpxPEgmJkwrKyksdHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIiYmKCQuX191fD00KSk6XyE9SyYmKF89PUstMT9MLS06Xz09SysxP0wrKzooXz5LP0wtLTpMKyssJC5fX3V8PTQpKSk6WC5fX2tbWl09bnVsbDtpZih6KWZvcihaPTA7WjxIO1orKykoVj1KW1pdKSE9bnVsbCYmKDImVi5fX3UpPT0wJiYoVi5fX2U9PVkmJihZPWMwKFYpKSxTOShWLFYpKTtyZXR1cm4gWX1mdW5jdGlvbiBSOShYLEcsSixZKXt2YXIgcSxaO2lmKHR5cGVvZiBYLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihxPVguX19rLFo9MDtxJiZaPHEubGVuZ3RoO1orKylxW1pdJiYocVtaXS5fXz1YLEc9UjkocVtaXSxHLEosWSkpO3JldHVybiBHfVguX19lIT1HJiYoWSYmKEcmJlgudHlwZSYmIUcucGFyZW50Tm9kZSYmKEc9YzAoWCkpLEouaW5zZXJ0QmVmb3JlKFguX19lLEd8fG51bGwpKSxHPVguX19lKTtkbyBHPUcmJkcubmV4dFNpYmxpbmc7d2hpbGUoRyE9bnVsbCYmRy5ub2RlVHlwZT09OCk7cmV0dXJuIEd9ZnVuY3Rpb24gQTAoWCxHKXtyZXR1cm4gRz1HfHxbXSxYPT1udWxsfHx0eXBlb2YgWD09ImJvb2xlYW4ifHwoWDEoWCk/WC5zb21lKGZ1bmN0aW9uKEope0EwKEosRyl9KTpHLnB1c2goWCkpLEd9ZnVuY3Rpb24gdDgoWCxHLEosWSl7dmFyIHEsWiwkLFY9WC5rZXksSz1YLnR5cGUsXz1HW0pdLEg9XyE9bnVsbCYmKDImXy5fX3UpPT0wO2lmKF89PT1udWxsJiZWPT1udWxsfHxIJiZWPT1fLmtleSYmSz09Xy50eXBlKXJldHVybiBKO2lmKFk+KEg/MTowKSl7Zm9yKHE9Si0xLFo9SisxO3E+PTB8fFo8Ry5sZW5ndGg7KWlmKChfPUdbJD1xPj0wP3EtLTpaKytdKSE9bnVsbCYmKDImXy5fX3UpPT0wJiZWPT1fLmtleSYmSz09Xy50eXBlKXJldHVybiAkfXJldHVybi0xfWZ1bmN0aW9uIFA5KFgsRyxKKXtHWzBdPT0iLSI/WC5zZXRQcm9wZXJ0eShHLEo9PW51bGw/IiI6Sik6WFtHXT1KPT1udWxsPyIiOnR5cGVvZiBKIT0ibnVtYmVyInx8bzgudGVzdChHKT9KOkorInB4In1mdW5jdGlvbiBMMShYLEcsSixZLHEpe3ZhciBaLCQ7WDppZihHPT0ic3R5bGUiKWlmKHR5cGVvZiBKPT0ic3RyaW5nIilYLnN0eWxlLmNzc1RleHQ9SjtlbHNle2lmKHR5cGVvZiBZPT0ic3RyaW5nIiYmKFguc3R5bGUuY3NzVGV4dD1ZPSIiKSxZKWZvcihHIGluIFkpSiYmRyBpbiBKfHxQOShYLnN0eWxlLEcsIiIpO2lmKEopZm9yKEcgaW4gSilZJiZKW0ddPT1ZW0ddfHxQOShYLnN0eWxlLEcsSltHXSl9ZWxzZSBpZihHWzBdPT0ibyImJkdbMV09PSJuIilaPUchPShHPUcucmVwbGFjZShrOSwiJDEiKSksJD1HLnRvTG93ZXJDYXNlKCksRz0kIGluIFh8fEc9PSJvbkZvY3VzT3V0Inx8Rz09Im9uRm9jdXNJbiI/JC5zbGljZSgyKTpHLnNsaWNlKDIpLFgubHx8KFgubD17fSksWC5sW0crWl09SixKP1k/SltlMF09WVtlMF06KEpbZTBdPWExLFguYWRkRXZlbnRMaXN0ZW5lcihHLFo/dTE6ZDEsWikpOlgucmVtb3ZlRXZlbnRMaXN0ZW5lcihHLFo/dTE6ZDEsWik7ZWxzZXtpZihxPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKUc9Ry5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihHIT0id2lkdGgiJiZHIT0iaGVpZ2h0IiYmRyE9ImhyZWYiJiZHIT0ibGlzdCImJkchPSJmb3JtIiYmRyE9InRhYkluZGV4IiYmRyE9ImRvd25sb2FkIiYmRyE9InJvd1NwYW4iJiZHIT0iY29sU3BhbiImJkchPSJyb2xlIiYmRyE9InBvcG92ZXIiJiZHIGluIFgpdHJ5e1hbR109Sj09bnVsbD8iIjpKO2JyZWFrIFh9Y2F0Y2goVil7fXR5cGVvZiBKPT0iZnVuY3Rpb24ifHwoSj09bnVsbHx8Sj09PSExJiZHWzRdIT0iLSI/WC5yZW1vdmVBdHRyaWJ1dGUoRyk6WC5zZXRBdHRyaWJ1dGUoRyxHPT0icG9wb3ZlciImJko9PTE/IiI6SikpfX1mdW5jdGlvbiBNOShYKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYodGhpcy5sKXt2YXIgSj10aGlzLmxbRy50eXBlK1hdO2lmKEdbSDFdPT1udWxsKUdbSDFdPWExKys7ZWxzZSBpZihHW0gxXTxKW2UwXSlyZXR1cm47cmV0dXJuIEooSS5ldmVudD9JLmV2ZW50KEcpOkcpfX19ZnVuY3Rpb24gbzEoWCxHLEosWSxxLFosJCxWLEssXyl7dmFyIEgseixMLEIsTSxOLE8sUCxBLHYseSx1LHAsYyx6MCxzPUcudHlwZTtpZihHLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKEs9ISEoMzImSi5fX3UpLFo9W1Y9Ry5fX2U9Si5fX2VdKSwoSD1JLl9fYikmJkgoRyk7WDppZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil0cnl7aWYoUD1HLnByb3BzLEE9cy5wcm90b3R5cGUmJnMucHJvdG90eXBlLnJlbmRlcix2PShIPXMuY29udGV4dFR5cGUpJiZZW0guX19jXSx5PUg/dj92LnByb3BzLnZhbHVlOkguX186WSxKLl9fYz9PPSh6PUcuX19jPUouX19jKS5fXz16Ll9fRTooQT9HLl9fYz16PW5ldyBzKFAseSk6KEcuX19jPXo9bmV3IGUoUCx5KSx6LmNvbnN0cnVjdG9yPXMsei5yZW5kZXI9ZTgpLHYmJnYuc3ViKHopLHouc3RhdGV8fCh6LnN0YXRlPXt9KSx6Ll9fbj1ZLEw9ei5fX2Q9ITAsei5fX2g9W10sei5fc2I9W10pLEEmJnouX19zPT1udWxsJiYoei5fX3M9ei5zdGF0ZSksQSYmcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJih6Ll9fcz09ei5zdGF0ZSYmKHouX19zPU0wKHt9LHouX19zKSksTTAoei5fX3Mscy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoUCx6Ll9fcykpKSxCPXoucHJvcHMsTT16LnN0YXRlLHouX192PUcsTClBJiZzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmei5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJnouY29tcG9uZW50V2lsbE1vdW50KCksQSYmei5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmei5fX2gucHVzaCh6LmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKEEmJnMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZQIT09QiYmei5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZ6LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoUCx5KSxHLl9fdj09Si5fX3Z8fCF6Ll9fZSYmei5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJnouc2hvdWxkQ29tcG9uZW50VXBkYXRlKFAsei5fX3MseSk9PT0hMSl7Ry5fX3YhPUouX192JiYoei5wcm9wcz1QLHouc3RhdGU9ei5fX3Msei5fX2Q9ITEpLEcuX19lPUouX19lLEcuX19rPUouX19rLEcuX19rLnNvbWUoZnVuY3Rpb24odCl7dCYmKHQuX189Ryl9KSxEMS5wdXNoLmFwcGx5KHouX19oLHouX3NiKSx6Ll9zYj1bXSx6Ll9faC5sZW5ndGgmJiQucHVzaCh6KTticmVhayBYfXouY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmei5jb21wb25lbnRXaWxsVXBkYXRlKFAsei5fX3MseSksQSYmei5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJnouX19oLnB1c2goZnVuY3Rpb24oKXt6LmNvbXBvbmVudERpZFVwZGF0ZShCLE0sTil9KX1pZih6LmNvbnRleHQ9eSx6LnByb3BzPVAsei5fX1A9WCx6Ll9fZT0hMSx1PUkuX19yLHA9MCxBKXouc3RhdGU9ei5fX3Msei5fX2Q9ITEsdSYmdShHKSxIPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLEQxLnB1c2guYXBwbHkoei5fX2gsei5fc2IpLHouX3NiPVtdO2Vsc2UgZG8gei5fX2Q9ITEsdSYmdShHKSxIPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLHouc3RhdGU9ei5fX3M7d2hpbGUoei5fX2QmJisrcDwyNSk7ei5zdGF0ZT16Ll9fcyx6LmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFk9TTAoTTAoe30sWSksei5nZXRDaGlsZENvbnRleHQoKSkpLEEmJiFMJiZ6LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoTj16LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEIsTSkpLGM9SCE9bnVsbCYmSC50eXBlPT09YSYmSC5rZXk9PW51bGw/ajkoSC5wcm9wcy5jaGlsZHJlbik6SCxWPUM5KFgsWDEoYyk/YzpbY10sRyxKLFkscSxaLCQsVixLLF8pLHouYmFzZT1HLl9fZSxHLl9fdSY9LTE2MSx6Ll9faC5sZW5ndGgmJiQucHVzaCh6KSxPJiYoei5fX0U9ei5fXz1udWxsKX1jYXRjaCh0KXtpZihHLl9fdj1udWxsLEt8fFohPW51bGwpaWYodC50aGVuKXtmb3IoRy5fX3V8PUs/MTYwOjEyODtWJiZWLm5vZGVUeXBlPT04JiZWLm5leHRTaWJsaW5nOylWPVYubmV4dFNpYmxpbmc7WltaLmluZGV4T2YoVildPW51bGwsRy5fX2U9Vn1lbHNle2Zvcih6MD1aLmxlbmd0aDt6MC0tOylsMShaW3owXSk7aTEoRyl9ZWxzZSBHLl9fZT1KLl9fZSxHLl9faz1KLl9fayx0LnRoZW58fGkxKEcpO0kuX19lKHQsRyxKKX1lbHNlIFo9PW51bGwmJkcuX192PT1KLl9fdj8oRy5fX2s9Si5fX2ssRy5fX2U9Si5fX2UpOlY9Ry5fX2U9bjgoSi5fX2UsRyxKLFkscSxaLCQsSyxfKTtyZXR1cm4oSD1JLmRpZmZlZCkmJkgoRyksMTI4JkcuX191P3ZvaWQgMDpWfWZ1bmN0aW9uIGkxKFgpe1gmJihYLl9fYyYmKFguX19jLl9fZT0hMCksWC5fX2smJlguX19rLnNvbWUoaTEpKX1mdW5jdGlvbiBiOShYLEcsSil7Zm9yKHZhciBZPTA7WTxKLmxlbmd0aDtZKyspcjEoSltZXSxKWysrWV0sSlsrK1ldKTtJLl9fYyYmSS5fX2MoRyxYKSxYLnNvbWUoZnVuY3Rpb24ocSl7dHJ5e1g9cS5fX2gscS5fX2g9W10sWC5zb21lKGZ1bmN0aW9uKFope1ouY2FsbChxKX0pfWNhdGNoKFope0kuX19lKFoscS5fX3YpfX0pfWZ1bmN0aW9uIGo5KFgpe3JldHVybiB0eXBlb2YgWCE9Im9iamVjdCJ8fFg9PW51bGx8fFguX19iPjA/WDpYMShYKT9YLm1hcChqOSk6TTAoe30sWCl9ZnVuY3Rpb24gbjgoWCxHLEosWSxxLFosJCxWLEspe3ZhciBfLEgseixMLEIsTSxOLE89Si5wcm9wc3x8RjEsUD1HLnByb3BzLEE9Ry50eXBlO2lmKEE9PSJzdmciP3E9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpBPT0ibWF0aCI/cT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6cXx8KHE9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxaIT1udWxsKXtmb3IoXz0wO188Wi5sZW5ndGg7XysrKWlmKChCPVpbX10pJiYic2V0QXR0cmlidXRlImluIEI9PSEhQSYmKEE/Qi5sb2NhbE5hbWU9PUE6Qi5ub2RlVHlwZT09Mykpe1g9QixaW19dPW51bGw7YnJlYWt9fWlmKFg9PW51bGwpe2lmKEE9PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFApO1g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHEsQSxQLmlzJiZQKSxWJiYoSS5fX20mJkkuX19tKEcsWiksVj0hMSksWj1udWxsfWlmKEE9PW51bGwpTz09PVB8fFYmJlguZGF0YT09UHx8KFguZGF0YT1QKTtlbHNle2lmKFo9WiYmTzEuY2FsbChYLmNoaWxkTm9kZXMpLCFWJiZaIT1udWxsKWZvcihPPXt9LF89MDtfPFguYXR0cmlidXRlcy5sZW5ndGg7XysrKU9bKEI9WC5hdHRyaWJ1dGVzW19dKS5uYW1lXT1CLnZhbHVlO2ZvcihfIGluIE8pQj1PW19dLF89PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/ej1COl89PSJjaGlsZHJlbiJ8fChfIGluIFApfHxfPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBQKXx8Xz09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIFApfHxMMShYLF8sbnVsbCxCLHEpO2ZvcihfIGluIFApQj1QW19dLF89PSJjaGlsZHJlbiI/TD1COl89PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/SD1COl89PSJ2YWx1ZSI/TT1COl89PSJjaGVja2VkIj9OPUI6ViYmdHlwZW9mIEIhPSJmdW5jdGlvbiJ8fE9bX109PT1CfHxMMShYLF8sQixPW19dLHEpO2lmKEgpVnx8eiYmKEguX19odG1sPT16Ll9faHRtbHx8SC5fX2h0bWw9PVguaW5uZXJIVE1MKXx8KFguaW5uZXJIVE1MPUguX19odG1sKSxHLl9faz1bXTtlbHNlIGlmKHomJihYLmlubmVySFRNTD0iIiksQzkoRy50eXBlPT0idGVtcGxhdGUiP1guY29udGVudDpYLFgxKEwpP0w6W0xdLEcsSixZLEE9PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6cSxaLCQsWj9aWzBdOkouX19rJiZjMChKLDApLFYsSyksWiE9bnVsbClmb3IoXz1aLmxlbmd0aDtfLS07KWwxKFpbX10pO1Z8fChfPSJ2YWx1ZSIsQT09InByb2dyZXNzIiYmTT09bnVsbD9YLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpNIT1udWxsJiYoTSE9PVhbX118fEE9PSJwcm9ncmVzcyImJiFNfHxBPT0ib3B0aW9uIiYmTSE9T1tfXSkmJkwxKFgsXyxNLE9bX10scSksXz0iY2hlY2tlZCIsTiE9bnVsbCYmTiE9WFtfXSYmTDEoWCxfLE4sT1tfXSxxKSl9cmV0dXJuIFh9ZnVuY3Rpb24gcjEoWCxHLEope3RyeXtpZih0eXBlb2YgWD09ImZ1bmN0aW9uIil7dmFyIFk9dHlwZW9mIFguX191PT0iZnVuY3Rpb24iO1kmJlguX191KCksWSYmRz09bnVsbHx8KFguX191PVgoRykpfWVsc2UgWC5jdXJyZW50PUd9Y2F0Y2gocSl7SS5fX2UocSxKKX19ZnVuY3Rpb24gUzkoWCxHLEope3ZhciBZLHE7aWYoSS51bm1vdW50JiZJLnVubW91bnQoWCksKFk9WC5yZWYpJiYoWS5jdXJyZW50JiZZLmN1cnJlbnQhPVguX19lfHxyMShZLG51bGwsRykpLChZPVguX19jKSE9bnVsbCl7aWYoWS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7WS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFope0kuX19lKFosRyl9WS5iYXNlPVkuX19QPW51bGx9aWYoWT1YLl9faylmb3IocT0wO3E8WS5sZW5ndGg7cSsrKVlbcV0mJlM5KFlbcV0sRyxKfHx0eXBlb2YgWC50eXBlIT0iZnVuY3Rpb24iKTtKfHxsMShYLl9fZSksWC5fX2M9WC5fXz1YLl9fZT12b2lkIDB9ZnVuY3Rpb24gZTgoWCxHLEope3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKFgsSil9ZnVuY3Rpb24gVTEoWCxHLEope3ZhciBZLHEsWiwkO0c9PWRvY3VtZW50JiYoRz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLEkuX18mJkkuX18oWCxHKSxxPShZPXR5cGVvZiBKPT0iZnVuY3Rpb24iKT9udWxsOkomJkouX19rfHxHLl9fayxaPVtdLCQ9W10sbzEoRyxYPSghWSYmSnx8RykuX19rPU8wKGEsbnVsbCxbWF0pLHF8fEYxLEYxLEcubmFtZXNwYWNlVVJJLCFZJiZKP1tKXTpxP251bGw6Ry5maXJzdENoaWxkP08xLmNhbGwoRy5jaGlsZE5vZGVzKTpudWxsLFosIVkmJko/SjpxP3EuX19lOkcuZmlyc3RDaGlsZCxZLCQpLGI5KFosWCwkKX1mdW5jdGlvbiB3MChYKXtmdW5jdGlvbiBHKEope3ZhciBZLHE7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwoWT1uZXcgU2V0LChxPXt9KVtHLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBxfSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihaKXt0aGlzLnByb3BzLnZhbHVlIT1aLnZhbHVlJiZZLmZvckVhY2goZnVuY3Rpb24oJCl7JC5fX2U9ITAsYzEoJCl9KX0sdGhpcy5zdWI9ZnVuY3Rpb24oWil7WS5hZGQoWik7dmFyICQ9Wi5jb21wb25lbnRXaWxsVW5tb3VudDtaLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7WSYmWS5kZWxldGUoWiksJCYmJC5jYWxsKFopfX0pLEouY2hpbGRyZW59cmV0dXJuIEcuX19jPSJfX2NDIitUOSsrLEcuX189WCxHLlByb3ZpZGVyPUcuX19sPShHLkNvbnN1bWVyPWZ1bmN0aW9uKEosWSl7cmV0dXJuIEouY2hpbGRyZW4oWSl9KS5jb250ZXh0VHlwZT1HLEd9TzE9RDEuc2xpY2UsST17X19lOmZ1bmN0aW9uKFgsRyxKLFkpe2Zvcih2YXIgcSxaLCQ7Rz1HLl9fOylpZigocT1HLl9fYykmJiFxLl9fKXRyeXtpZigoWj1xLmNvbnN0cnVjdG9yKSYmWi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPW51bGwmJihxLnNldFN0YXRlKFouZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKFgpKSwkPXEuX19kKSxxLmNvbXBvbmVudERpZENhdGNoIT1udWxsJiYocS5jb21wb25lbnREaWRDYXRjaChYLFl8fHt9KSwkPXEuX19kKSwkKXJldHVybiBxLl9fRT1xfWNhdGNoKFYpe1g9Vn10aHJvdyBYfX0sQTk9MCxsOD1mdW5jdGlvbihYKXtyZXR1cm4gWCE9bnVsbCYmWC5jb25zdHJ1Y3Rvcj09PXZvaWQgMH0sZS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oWCxHKXt2YXIgSjtKPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1NMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgWD09ImZ1bmN0aW9uIiYmKFg9WChNMCh7fSxKKSx0aGlzLnByb3BzKSksWCYmTTAoSixYKSxYIT1udWxsJiZ0aGlzLl9fdiYmKEcmJnRoaXMuX3NiLnB1c2goRyksYzEodGhpcykpfSxlLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihYKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLFgmJnRoaXMuX19oLnB1c2goWCksYzEodGhpcykpfSxlLnByb3RvdHlwZS5yZW5kZXI9YSxiMD1bXSx3OT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsSTk9ZnVuY3Rpb24oWCxHKXtyZXR1cm4gWC5fX3YuX19iLUcuX192Ll9fYn0sTjEuX19yPTAsZjE9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxIMT0iX19kIitmMSxlMD0iX19hIitmMSxrOT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxhMT0wLGQxPU05KCExKSx1MT1NOSghMCksVDk9MDt2YXIgaTAseCxzMSx5OSxHMT0wLGQ5PVtdLGw9SSx2OT1sLl9fYixoOT1sLl9fcixtOT1sLmRpZmZlZCxnOT1sLl9fYyx4OT1sLnVubW91bnQscDk9bC5fXztmdW5jdGlvbiBNMShYLEcpe2wuX19oJiZsLl9faCh4LFgsRzF8fEcpLEcxPTA7dmFyIEo9eC5fX0h8fCh4Ll9fSD17X186W10sX19oOltdfSk7cmV0dXJuIFg+PUouX18ubGVuZ3RoJiZKLl9fLnB1c2goe30pLEouX19bWF19ZnVuY3Rpb24gVChYKXtyZXR1cm4gRzE9MSxuMShjOSxYKX1mdW5jdGlvbiBuMShYLEcsSil7dmFyIFk9TTEoaTArKywyKTtpZihZLnQ9WCwhWS5fX2MmJihZLl9fPVtKP0ooRyk6Yzkodm9pZCAwLEcpLGZ1bmN0aW9uKFYpe3ZhciBLPVkuX19OP1kuX19OWzBdOlkuX19bMF0sXz1ZLnQoSyxWKTtLIT09XyYmKFkuX19OPVtfLFkuX19bMV1dLFkuX19jLnNldFN0YXRlKHt9KSl9XSxZLl9fYz14LCF4Ll9fZikpe3ZhciBxPWZ1bmN0aW9uKFYsSyxfKXtpZighWS5fX2MuX19IKXJldHVybiEwO3ZhciBIPVkuX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oTCl7cmV0dXJuIEwuX19jfSk7aWYoSC5ldmVyeShmdW5jdGlvbihMKXtyZXR1cm4hTC5fX059KSlyZXR1cm4hWnx8Wi5jYWxsKHRoaXMsVixLLF8pO3ZhciB6PVkuX19jLnByb3BzIT09VjtyZXR1cm4gSC5zb21lKGZ1bmN0aW9uKEwpe2lmKEwuX19OKXt2YXIgQj1MLl9fWzBdO0wuX189TC5fX04sTC5fX049dm9pZCAwLEIhPT1MLl9fWzBdJiYoej0hMCl9fSksWiYmWi5jYWxsKHRoaXMsVixLLF8pfHx6fTt4Ll9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlosY29tcG9uZW50V2lsbFVwZGF0ZTokfT14O3guY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihWLEssXyl7aWYodGhpcy5fX2Upe3ZhciBIPVo7Wj12b2lkIDAscShWLEssXyksWj1IfSQmJiQuY2FsbCh0aGlzLFYsSyxfKX0seC5zaG91bGRDb21wb25lbnRVcGRhdGU9cX1yZXR1cm4gWS5fX058fFkuX199ZnVuY3Rpb24gUihYLEcpe3ZhciBKPU0xKGkwKyssMyk7IWwuX19zJiZ1OShKLl9fSCxHKSYmKEouX189WCxKLnU9Ryx4Ll9fSC5fX2gucHVzaChKKSl9ZnVuY3Rpb24gYihYKXtyZXR1cm4gRzE9NSxqMChmdW5jdGlvbigpe3JldHVybntjdXJyZW50Olh9fSxbXSl9ZnVuY3Rpb24gajAoWCxHKXt2YXIgSj1NMShpMCsrLDcpO3JldHVybiB1OShKLl9fSCxHKSYmKEouX189WCgpLEouX19IPUcsSi5fX2g9WCksSi5fX31mdW5jdGlvbiBqKFgsRyl7cmV0dXJuIEcxPTgsajAoZnVuY3Rpb24oKXtyZXR1cm4gWH0sRyl9ZnVuY3Rpb24gUzAoWCl7dmFyIEc9eC5jb250ZXh0W1guX19jXSxKPU0xKGkwKyssOSk7cmV0dXJuIEouYz1YLEc/KEouX189PW51bGwmJihKLl9fPSEwLEcuc3ViKHgpKSxHLnByb3BzLnZhbHVlKTpYLl9ffWZ1bmN0aW9uIFg0KCl7Zm9yKHZhciBYO1g9ZDkuc2hpZnQoKTspe3ZhciBHPVguX19IO2lmKFguX19QJiZHKXRyeXtHLl9faC5zb21lKFAxKSxHLl9faC5zb21lKHQxKSxHLl9faD1bXX1jYXRjaChKKXtHLl9faD1bXSxsLl9fZShKLFguX192KX19fWwuX19iPWZ1bmN0aW9uKFgpe3g9bnVsbCx2OSYmdjkoWCl9LGwuX189ZnVuY3Rpb24oWCxHKXtYJiZHLl9fayYmRy5fX2suX19tJiYoWC5fX209Ry5fX2suX19tKSxwOSYmcDkoWCxHKX0sbC5fX3I9ZnVuY3Rpb24oWCl7aDkmJmg5KFgpLGkwPTA7dmFyIEc9KHg9WC5fX2MpLl9fSDtHJiYoczE9PT14PyhHLl9faD1bXSx4Ll9faD1bXSxHLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihHLl9faC5zb21lKFAxKSxHLl9faC5zb21lKHQxKSxHLl9faD1bXSxpMD0wKSksczE9eH0sbC5kaWZmZWQ9ZnVuY3Rpb24oWCl7bTkmJm05KFgpO3ZhciBHPVguX19jO0cmJkcuX19IJiYoRy5fX0guX19oLmxlbmd0aCYmKGQ5LnB1c2goRykhPT0xJiZ5OT09PWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKHk5PWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8RzQpKFg0KSksRy5fX0guX18uc29tZShmdW5jdGlvbihKKXtKLnUmJihKLl9fSD1KLnUpLEoudT12b2lkIDB9KSksczE9eD1udWxsfSxsLl9fYz1mdW5jdGlvbihYLEcpe0cuc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZShQMSksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiFZLl9ffHx0MShZKX0pfWNhdGNoKFkpe0cuc29tZShmdW5jdGlvbihxKXtxLl9faCYmKHEuX19oPVtdKX0pLEc9W10sbC5fX2UoWSxKLl9fdil9fSksZzkmJmc5KFgsRyl9LGwudW5tb3VudD1mdW5jdGlvbihYKXt4OSYmeDkoWCk7dmFyIEcsSj1YLl9fYztKJiZKLl9fSCYmKEouX19ILl9fLnNvbWUoZnVuY3Rpb24oWSl7dHJ5e1AxKFkpfWNhdGNoKHEpe0c9cX19KSxKLl9fSD12b2lkIDAsRyYmbC5fX2UoRyxKLl9fdikpfTt2YXIgZjk9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBHNChYKXt2YXIgRyxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFkpLGY5JiZjYW5jZWxBbmltYXRpb25GcmFtZShHKSxzZXRUaW1lb3V0KFgpfSxZPXNldFRpbWVvdXQoSiwzNSk7ZjkmJihHPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24gUDEoWCl7dmFyIEc9eCxKPVguX19jO3R5cGVvZiBKPT0iZnVuY3Rpb24iJiYoWC5fX2M9dm9pZCAwLEooKSkseD1HfWZ1bmN0aW9uIHQxKFgpe3ZhciBHPXg7WC5fX2M9WC5fXygpLHg9R31mdW5jdGlvbiB1OShYLEcpe3JldHVybiFYfHxYLmxlbmd0aCE9PUcubGVuZ3RofHxHLnNvbWUoZnVuY3Rpb24oSixZKXtyZXR1cm4gSiE9PVhbWV19KX1mdW5jdGlvbiBjOShYLEcpe3JldHVybiB0eXBlb2YgRz09ImZ1bmN0aW9uIj9HKFgpOkd9ZnVuY3Rpb24gXzQoWCxHKXtmb3IodmFyIEogaW4gRylYW0pdPUdbSl07cmV0dXJuIFh9ZnVuY3Rpb24gaTkoWCxHKXtmb3IodmFyIEogaW4gWClpZihKIT09Il9fc291cmNlIiYmIShKIGluIEcpKXJldHVybiEwO2Zvcih2YXIgWSBpbiBHKWlmKFkhPT0iX19zb3VyY2UiJiZYW1ldIT09R1tZXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBhOShYLEcpe3RoaXMucHJvcHM9WCx0aGlzLmNvbnRleHQ9R30oYTkucHJvdG90eXBlPW5ldyBlKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxhOS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFgsRyl7cmV0dXJuIGk5KHRoaXMucHJvcHMsWCl8fGk5KHRoaXMuc3RhdGUsRyl9O3ZhciBsOT1JLl9fYjtJLl9fYj1mdW5jdGlvbihYKXtYLnR5cGUmJlgudHlwZS5fX2YmJlgucmVmJiYoWC5wcm9wcy5yZWY9WC5yZWYsWC5yZWY9bnVsbCksbDkmJmw5KFgpfTt2YXIgVjQ9SS5fX2U7SS5fX2U9ZnVuY3Rpb24oWCxHLEosWSl7aWYoWC50aGVuKXtmb3IodmFyIHEsWj1HO1o9Wi5fXzspaWYoKHE9Wi5fX2MpJiZxLl9fYylyZXR1cm4gRy5fX2U9PW51bGwmJihHLl9fZT1KLl9fZSxHLl9faz1KLl9faykscS5fX2MoWCxHKX1WNChYLEcsSixZKX07dmFyIG85PUkudW5tb3VudDtmdW5jdGlvbiBYOChYLEcsSil7cmV0dXJuIFgmJihYLl9fYyYmWC5fX2MuX19IJiYoWC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWSl7dHlwZW9mIFkuX19jPT0iZnVuY3Rpb24iJiZZLl9fYygpfSksWC5fX2MuX19IPW51bGwpLChYPV80KHt9LFgpKS5fX2MhPW51bGwmJihYLl9fYy5fX1A9PT1KJiYoWC5fX2MuX19QPUcpLFguX19jLl9fZT0hMCxYLl9fYz1udWxsKSxYLl9faz1YLl9fayYmWC5fX2subWFwKGZ1bmN0aW9uKFkpe3JldHVybiBYOChZLEcsSil9KSksWH1mdW5jdGlvbiBHOChYLEcsSil7cmV0dXJuIFgmJkomJihYLl9fdj1udWxsLFguX19rPVguX19rJiZYLl9fay5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuIEc4KFksRyxKKX0pLFguX19jJiZYLl9fYy5fX1A9PT1HJiYoWC5fX2UmJkouYXBwZW5kQ2hpbGQoWC5fX2UpLFguX19jLl9fZT0hMCxYLl9fYy5fX1A9SikpLFh9ZnVuY3Rpb24gZTEoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gSjgoWCl7dmFyIEc9WC5fXyYmWC5fXy5fX2M7cmV0dXJuIEcmJkcuX19hJiZHLl9fYShYKX1mdW5jdGlvbiBBMSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfUkudW5tb3VudD1mdW5jdGlvbihYKXt2YXIgRz1YLl9fYztHJiYoRy5fX3o9ITApLEcmJkcuX19SJiZHLl9fUigpLEcmJjMyJlguX191JiYoWC50eXBlPW51bGwpLG85JiZvOShYKX0sKGUxLnByb3RvdHlwZT1uZXcgZSkuX19jPWZ1bmN0aW9uKFgsRyl7dmFyIEo9Ry5fX2MsWT10aGlzO1kubz09bnVsbCYmKFkubz1bXSksWS5vLnB1c2goSik7dmFyIHE9SjgoWS5fX3YpLFo9ITEsJD1mdW5jdGlvbigpe1p8fFkuX196fHwoWj0hMCxKLl9fUj1udWxsLHE/cShLKTpLKCkpfTtKLl9fUj0kO3ZhciBWPUouX19QO0ouX19QPW51bGw7dmFyIEs9ZnVuY3Rpb24oKXtpZighLS1ZLl9fdSl7aWYoWS5zdGF0ZS5fX2Epe3ZhciBfPVkuc3RhdGUuX19hO1kuX192Ll9fa1swXT1HOChfLF8uX19jLl9fUCxfLl9fYy5fX08pfXZhciBIO2ZvcihZLnNldFN0YXRlKHtfX2E6WS5fX2I9bnVsbH0pO0g9WS5vLnBvcCgpOylILl9fUD1WLEguZm9yY2VVcGRhdGUoKX19O1kuX191Kyt8fDMyJkcuX191fHxZLnNldFN0YXRlKHtfX2E6WS5fX2I9WS5fX3YuX19rWzBdfSksWC50aGVuKCQsJCl9LGUxLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sZTEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihYLEcpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFk9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09WDgodGhpcy5fX2IsSixZLl9fTz1ZLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgcT1HLl9fYSYmTzAoYSxudWxsLFguZmFsbGJhY2spO3JldHVybiBxJiYocS5fX3UmPS0zMyksW08wKGEsbnVsbCxHLl9fYT9udWxsOlguY2hpbGRyZW4pLHFdfTt2YXIgcjk9ZnVuY3Rpb24oWCxHLEope2lmKCsrSlsxXT09PUpbMF0mJlgubC5kZWxldGUoRyksWC5wcm9wcy5yZXZlYWxPcmRlciYmKFgucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCFYLmwuc2l6ZSkpZm9yKEo9WC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7WC5pPUo9SlsyXX19OyhBMS5wcm90b3R5cGU9bmV3IGUpLl9fYT1mdW5jdGlvbihYKXt2YXIgRz10aGlzLEo9SjgoRy5fX3YpLFk9Ry5sLmdldChYKTtyZXR1cm4gWVswXSsrLGZ1bmN0aW9uKHEpe3ZhciBaPWZ1bmN0aW9uKCl7Ry5wcm9wcy5yZXZlYWxPcmRlcj8oWS5wdXNoKHEpLHI5KEcsWCxZKSk6cSgpfTtKP0ooWik6WigpfX0sQTEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihYKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgRz1BMChYLmNoaWxkcmVuKTtYLnJldmVhbE9yZGVyJiZYLnJldmVhbE9yZGVyWzBdPT09ImIiJiZHLnJldmVyc2UoKTtmb3IodmFyIEo9Ry5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KEdbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIFguY2hpbGRyZW59LEExLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9QTEucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIFg9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihHLEope3I5KFgsSixHKX0pfTt2YXIgejQ9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsSzQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFc0PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTDQ9L1tBLVowLTldL2csSDQ9dHlwZW9mIGRvY3VtZW50PCJ1IixCND1mdW5jdGlvbihYKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoWCl9O2Z1bmN0aW9uIFk4KFgsRyxKKXtyZXR1cm4gRy5fX2s9PW51bGwmJihHLnRleHRDb250ZW50PSIiKSxVMShYLEcpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksWD9YLl9fYzpudWxsfWUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oWCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFgse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrWF19LHNldDpmdW5jdGlvbihHKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxYLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6R30pfX0pfSk7dmFyIHM5PUkuZXZlbnQ7SS5ldmVudD1mdW5jdGlvbihYKXtyZXR1cm4gczkmJihYPXM5KFgpKSxYLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LFguaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LFguaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sWC5uYXRpdmVFdmVudD1YfTt2YXIgWjgsRjQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHQ5PUkudm5vZGU7SS52bm9kZT1mdW5jdGlvbihYKXt0eXBlb2YgWC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oRyl7dmFye3Byb3BzOkosdHlwZTpZfT1HLHE9e30sWj1ZLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciAkIGluIEope3ZhciBWPUpbJF07aWYoISgkPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJlY9PW51bGx8fEg0JiYkPT09ImNoaWxkcmVuIiYmWT09PSJub3NjcmlwdCJ8fCQ9PT0iY2xhc3MifHwkPT09ImNsYXNzTmFtZSIpKXt2YXIgSz0kLnRvTG93ZXJDYXNlKCk7JD09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD8kPSJ2YWx1ZSI6JD09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOks9PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpLWzBdPT09Im8iJiZLWzFdPT09Im4iP0s9PT0ib25kb3VibGVjbGljayI/JD0ib25kYmxjbGljayI6SyE9PSJvbmNoYW5nZSJ8fFkhPT0iaW5wdXQiJiZZIT09InRleHRhcmVhInx8QjQoSi50eXBlKT9LPT09Im9uZm9jdXMiPyQ9Im9uZm9jdXNpbiI6Sz09PSJvbmJsdXIiPyQ9Im9uZm9jdXNvdXQiOlc0LnRlc3QoJCkmJigkPUspOks9JD0ib25pbnB1dCI6WiYmSzQudGVzdCgkKT8kPSQucmVwbGFjZShMNCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxLPT09Im9uaW5wdXQiJiZxWyQ9S10mJigkPSJvbmlucHV0Q2FwdHVyZSIpLHFbJF09Vn19WT09InNlbGVjdCImJihxLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHEudmFsdWUpJiYocS52YWx1ZT1BMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe18ucHJvcHMuc2VsZWN0ZWQ9cS52YWx1ZS5pbmRleE9mKF8ucHJvcHMudmFsdWUpIT0tMX0pKSxxLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKHEudmFsdWU9QTAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihfKXtfLnByb3BzLnNlbGVjdGVkPXEubXVsdGlwbGU/cS5kZWZhdWx0VmFsdWUuaW5kZXhPZihfLnByb3BzLnZhbHVlKSE9LTE6cS5kZWZhdWx0VmFsdWU9PV8ucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8ocS5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjbGFzc05hbWUiLEY0KSk6Si5jbGFzc05hbWUmJihxLmNsYXNzPXEuY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxHLnByb3BzPXF9KFgpLFguJCR0eXBlb2Y9ejQsdDkmJnQ5KFgpfTt2YXIgbjk9SS5fX3I7SS5fX3I9ZnVuY3Rpb24oWCl7bjkmJm45KFgpLFo4PVguX19jfTt2YXIgZTk9SS5kaWZmZWQ7SS5kaWZmZWQ9ZnVuY3Rpb24oWCl7ZTkmJmU5KFgpO3Zhcntwcm9wczpHLF9fZTpKfT1YO0ohPW51bGwmJlgudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBHJiZHLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Ry52YWx1ZT09bnVsbD8iIjpHLnZhbHVlKSxaOD1udWxsfTtmdW5jdGlvbiBxOChYKXtyZXR1cm4hIVguX19rJiYoVTEobnVsbCxYKSwhMCl9ZnVuY3Rpb24gUTgoWCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihHKXtZOChHLFgpfSx1bm1vdW50OmZ1bmN0aW9uKCl7cTgoWCl9fX12YXIgJDg9Imh0dHBzOi8vZ2l0aHViLmNvbS9jYW1lcm9uY29va2UvQVhlIixfOD0iQVhlIGlzIG5vdCBpbnN0YWxsZWQuIEluc3RhbGwgaXQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY2FtZXJvbmNvb2tlL0FYZS4iO2Z1bmN0aW9uIFY4KFgpe2xldCBHPVtdLEo9bmV3IE1hcDtmb3IobGV0IFkgb2YgWCl7bGV0IHE9WS5hcHBOYW1lfHxZLmJ1bmRsZUlkfHwiVW5rbm93biIsWj1ZLmJ1bmRsZUlkfHxxLCQ9Si5nZXQoWik7aWYoISQpJD17a2V5OlosYXBwTmFtZTpxLGJ1bmRsZUlkOlkuYnVuZGxlSWQsdGFyZ2V0czpbXX0sSi5zZXQoWiwkKSxHLnB1c2goWik7JC50YXJnZXRzLnB1c2goWSl9cmV0dXJuIEcubWFwKChZKT0+Si5nZXQoWSkpfWZ1bmN0aW9uIE44KFgsRyl7Zm9yKHZhciBKIGluIEcpWFtKXT1HW0pdO3JldHVybiBYfWZ1bmN0aW9uIEo5KFgsRyl7Zm9yKHZhciBKIGluIFgpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBHKSlyZXR1cm4hMDtmb3IodmFyIFkgaW4gRylpZihZIT09Il9fc291cmNlIiYmWFtZXSE9PUdbWV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gejgoWCxHKXt0aGlzLnByb3BzPVgsdGhpcy5jb250ZXh0PUd9ZnVuY3Rpb24gWTkoWCxHKXtmdW5jdGlvbiBKKHEpe3ZhciBaPXRoaXMucHJvcHMucmVmO3JldHVybiBaIT1xLnJlZiYmWiYmKHR5cGVvZiBaPT0iZnVuY3Rpb24iP1oobnVsbCk6Wi5jdXJyZW50PW51bGwpLEc/IUcodGhpcy5wcm9wcyxxKXx8WiE9cS5yZWY6SjkodGhpcy5wcm9wcyxxKX1mdW5jdGlvbiBZKHEpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1KLE8wKFgscSl9cmV0dXJuIFkuZGlzcGxheU5hbWU9Ik1lbW8oIisoWC5kaXNwbGF5TmFtZXx8WC5uYW1lKSsiKSIsWS5fX2Y9WS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxZLnR5cGU9WCxZfSh6OC5wcm90b3R5cGU9bmV3IGUpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHo4LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWCxHKXtyZXR1cm4gSjkodGhpcy5wcm9wcyxYKXx8SjkodGhpcy5zdGF0ZSxHKX07dmFyIEs4PUkuX19iO0kuX19iPWZ1bmN0aW9uKFgpe1gudHlwZSYmWC50eXBlLl9fZiYmWC5yZWYmJihYLnByb3BzLnJlZj1YLnJlZixYLnJlZj1udWxsKSxLOCYmSzgoWCl9O3ZhciBEND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBhMChYKXtmdW5jdGlvbiBHKEope3ZhciBZPU44KHt9LEopO3JldHVybiBkZWxldGUgWS5yZWYsWChZLEoucmVmfHxudWxsKX1yZXR1cm4gRy4kJHR5cGVvZj1ENCxHLnJlbmRlcj1YLEcucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Ry5fX2Y9ITAsRy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKyhYLmRpc3BsYXlOYW1lfHxYLm5hbWUpKyIpIixHfXZhciBOND1JLl9fZTtJLl9fZT1mdW5jdGlvbihYLEcsSixZKXtpZihYLnRoZW4pe2Zvcih2YXIgcSxaPUc7Wj1aLl9fOylpZigocT1aLl9fYykmJnEuX19jKXJldHVybiBHLl9fZT09bnVsbCYmKEcuX19lPUouX19lLEcuX19rPUouX19rKSxxLl9fYyhYLEcpfU40KFgsRyxKLFkpfTt2YXIgVzg9SS51bm1vdW50O2Z1bmN0aW9uIE84KFgsRyxKKXtyZXR1cm4gWCYmKFguX19jJiZYLl9fYy5fX0gmJihYLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihZKXt0eXBlb2YgWS5fX2M9PSJmdW5jdGlvbiImJlkuX19jKCl9KSxYLl9fYy5fX0g9bnVsbCksKFg9Tjgoe30sWCkpLl9fYyE9bnVsbCYmKFguX19jLl9fUD09PUomJihYLl9fYy5fX1A9RyksWC5fX2MuX19lPSEwLFguX19jPW51bGwpLFguX19rPVguX19rJiZYLl9fay5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuIE84KFksRyxKKX0pKSxYfWZ1bmN0aW9uIFU4KFgsRyxKKXtyZXR1cm4gWCYmSiYmKFguX192PW51bGwsWC5fX2s9WC5fX2smJlguX19rLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gVTgoWSxHLEopfSksWC5fX2MmJlguX19jLl9fUD09PUcmJihYLl9fZSYmSi5hcHBlbmRDaGlsZChYLl9fZSksWC5fX2MuX19lPSEwLFguX19jLl9fUD1KKSksWH1mdW5jdGlvbiBHOSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBQOChYKXt2YXIgRz1YLl9fJiZYLl9fLl9fYztyZXR1cm4gRyYmRy5fX2EmJkcuX19hKFgpfWZ1bmN0aW9uIHcxKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9SS51bm1vdW50PWZ1bmN0aW9uKFgpe3ZhciBHPVguX19jO0cmJihHLl9fej0hMCksRyYmRy5fX1ImJkcuX19SKCksRyYmMzImWC5fX3UmJihYLnR5cGU9bnVsbCksVzgmJlc4KFgpfSwoRzkucHJvdG90eXBlPW5ldyBlKS5fX2M9ZnVuY3Rpb24oWCxHKXt2YXIgSj1HLl9fYyxZPXRoaXM7WS5vPT1udWxsJiYoWS5vPVtdKSxZLm8ucHVzaChKKTt2YXIgcT1QOChZLl9fdiksWj0hMSwkPWZ1bmN0aW9uKCl7Wnx8WS5fX3p8fChaPSEwLEouX19SPW51bGwscT9xKEspOksoKSl9O0ouX19SPSQ7dmFyIFY9Si5fX1A7Si5fX1A9bnVsbDt2YXIgSz1mdW5jdGlvbigpe2lmKCEtLVkuX191KXtpZihZLnN0YXRlLl9fYSl7dmFyIF89WS5zdGF0ZS5fX2E7WS5fX3YuX19rWzBdPVU4KF8sXy5fX2MuX19QLF8uX19jLl9fTyl9dmFyIEg7Zm9yKFkuc2V0U3RhdGUoe19fYTpZLl9fYj1udWxsfSk7SD1ZLm8ucG9wKCk7KUguX19QPVYsSC5mb3JjZVVwZGF0ZSgpfX07WS5fX3UrK3x8MzImRy5fX3V8fFkuc2V0U3RhdGUoe19fYTpZLl9fYj1ZLl9fdi5fX2tbMF19KSxYLnRoZW4oJCwkKX0sRzkucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxHOS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKFgsRyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWT10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1POCh0aGlzLl9fYixKLFkuX19PPVkuX19QKX10aGlzLl9fYj1udWxsfXZhciBxPUcuX19hJiZPMChhLG51bGwsWC5mYWxsYmFjayk7cmV0dXJuIHEmJihxLl9fdSY9LTMzKSxbTzAoYSxudWxsLEcuX19hP251bGw6WC5jaGlsZHJlbikscV19O3ZhciBMOD1mdW5jdGlvbihYLEcsSil7aWYoKytKWzFdPT09SlswXSYmWC5sLmRlbGV0ZShHKSxYLnByb3BzLnJldmVhbE9yZGVyJiYoWC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8IVgubC5zaXplKSlmb3IoSj1YLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhaztYLmk9Sj1KWzJdfX07KHcxLnByb3RvdHlwZT1uZXcgZSkuX19hPWZ1bmN0aW9uKFgpe3ZhciBHPXRoaXMsSj1QOChHLl9fdiksWT1HLmwuZ2V0KFgpO3JldHVybiBZWzBdKyssZnVuY3Rpb24ocSl7dmFyIFo9ZnVuY3Rpb24oKXtHLnByb3BzLnJldmVhbE9yZGVyPyhZLnB1c2gocSksTDgoRyxYLFkpKTpxKCl9O0o/SihaKTpaKCl9fSx3MS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKFgpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBHPUEwKFguY2hpbGRyZW4pO1gucmV2ZWFsT3JkZXImJlgucmV2ZWFsT3JkZXJbMF09PT0iYiImJkcucmV2ZXJzZSgpO2Zvcih2YXIgSj1HLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoR1tKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gWC5jaGlsZHJlbn0sdzEucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT13MS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgWD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEcsSil7TDgoWCxKLEcpfSl9O3ZhciBPND10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxVND0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sUDQ9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxNND0vW0EtWjAtOV0vZyxBND10eXBlb2YgZG9jdW1lbnQ8InUiLHc0PWZ1bmN0aW9uKFgpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChYKX07ZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbihYKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsWCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIitYXX0sc2V0OmZ1bmN0aW9uKEcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFgse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpHfSl9fSl9KTt2YXIgSDg9SS5ldmVudDtJLmV2ZW50PWZ1bmN0aW9uKFgpe3JldHVybiBIOCYmKFg9SDgoWCkpLFgucGVyc2lzdD1mdW5jdGlvbigpe30sWC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sWC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxYLm5hdGl2ZUV2ZW50PVh9O3ZhciBNOCxJND17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sQjg9SS52bm9kZTtJLnZub2RlPWZ1bmN0aW9uKFgpe3R5cGVvZiBYLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihHKXt2YXJ7cHJvcHM6Six0eXBlOll9PUcscT17fSxaPVkuaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyICQgaW4gSil7dmFyIFY9SlskXTtpZighKCQ9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmVj09bnVsbHx8QTQmJiQ9PT0iY2hpbGRyZW4iJiZZPT09Im5vc2NyaXB0Inx8JD09PSJjbGFzcyJ8fCQ9PT0iY2xhc3NOYW1lIikpe3ZhciBLPSQudG9Mb3dlckNhc2UoKTskPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsPyQ9InZhbHVlIjokPT09ImRvd25sb2FkIiYmVj09PSEwP1Y9IiI6Sz09PSJ0cmFuc2xhdGUiJiZWPT09Im5vIj9WPSExOktbMF09PT0ibyImJktbMV09PT0ibiI/Sz09PSJvbmRvdWJsZWNsaWNrIj8kPSJvbmRibGNsaWNrIjpLIT09Im9uY2hhbmdlInx8WSE9PSJpbnB1dCImJlkhPT0idGV4dGFyZWEifHx3NChKLnR5cGUpP0s9PT0ib25mb2N1cyI/JD0ib25mb2N1c2luIjpLPT09Im9uYmx1ciI/JD0ib25mb2N1c291dCI6UDQudGVzdCgkKSYmKCQ9Syk6Sz0kPSJvbmlucHV0IjpaJiZVNC50ZXN0KCQpPyQ9JC5yZXBsYWNlKE00LCItJCYiKS50b0xvd2VyQ2FzZSgpOlY9PT1udWxsJiYoVj12b2lkIDApLEs9PT0ib25pbnB1dCImJnFbJD1LXSYmKCQ9Im9uaW5wdXRDYXB0dXJlIikscVskXT1WfX1ZPT0ic2VsZWN0IiYmKHEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkocS52YWx1ZSkmJihxLnZhbHVlPUEwKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oXyl7Xy5wcm9wcy5zZWxlY3RlZD1xLnZhbHVlLmluZGV4T2YoXy5wcm9wcy52YWx1ZSkhPS0xfSkpLHEuZGVmYXVsdFZhbHVlIT1udWxsJiYocS52YWx1ZT1BMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe18ucHJvcHMuc2VsZWN0ZWQ9cS5tdWx0aXBsZT9xLmRlZmF1bHRWYWx1ZS5pbmRleE9mKF8ucHJvcHMudmFsdWUpIT0tMTpxLmRlZmF1bHRWYWx1ZT09Xy5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhxLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNsYXNzTmFtZSIsSTQpKTpKLmNsYXNzTmFtZSYmKHEuY2xhc3M9cS5jbGFzc05hbWU9Si5jbGFzc05hbWUpLEcucHJvcHM9cX0oWCksWC4kJHR5cGVvZj1PNCxCOCYmQjgoWCl9O3ZhciBGOD1JLl9fcjtJLl9fcj1mdW5jdGlvbihYKXtGOCYmRjgoWCksTTg9WC5fX2N9O3ZhciBEOD1JLmRpZmZlZDtJLmRpZmZlZD1mdW5jdGlvbihYKXtEOCYmRDgoWCk7dmFye3Byb3BzOkcsX19lOkp9PVg7SiE9bnVsbCYmWC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEcmJkcudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1HLnZhbHVlPT1udWxsPyIiOkcudmFsdWUpLE04PW51bGx9O3ZhciB5MD0zO2Z1bmN0aW9uIFo5KFgpe3JldHVybiBYPT09ImxhbmRzY2FwZV9sZWZ0Inx8WD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEoxKFgpe3JldHVybiEhWCYmKFo5KFgub3JpZW50YXRpb24pfHxYLndpZHRoPlguaGVpZ2h0KX1mdW5jdGlvbiBJMShYKXtpZighWHx8WC53aWR0aDw9MHx8WC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEc9WjkoWC5vcmllbnRhdGlvbil8fFgud2lkdGg+WC5oZWlnaHQsSj1HP01hdGgubWF4KFgud2lkdGgsWC5oZWlnaHQpOk1hdGgubWluKFgud2lkdGgsWC5oZWlnaHQpLFk9Rz9NYXRoLm1pbihYLndpZHRoLFguaGVpZ2h0KTpNYXRoLm1heChYLndpZHRoLFguaGVpZ2h0KTtpZihKPT09WC53aWR0aCYmWT09PVguaGVpZ2h0KXJldHVybiBYO3JldHVybnsuLi5YLHdpZHRoOkosaGVpZ2h0Oll9fWZ1bmN0aW9uIFkxKFgpe2xldCBHPUkxKFgpLEo9QTgoWD8ub3JpZW50YXRpb24pLFk9TWF0aC5hYnMoSik9PT05MCxxPSEhWCYmWC53aWR0aD5YLmhlaWdodCxaPUo9PT0xODB8fFkmJiFxO3JldHVybntkaXNwbGF5Q29uZmlnOkcscm90YXRpb25EZWdyZWVzOlo/SjowLG5lZWRzQ3NzUm90YXRpb246WixpbnB1dE9yaWVudGF0aW9uOlo/WD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBBOChYKXtzd2l0Y2goWCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBaMShYLEcsSil7c3dpdGNoKFgpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OkoseToxLUd9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUoseTpHfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUcseToxLUp9O2RlZmF1bHQ6cmV0dXJue3g6Ryx5Okp9fX1mdW5jdGlvbiBxOShYLEcpe3N3aXRjaChYKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goRyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEd9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChHKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gR31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goRyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEd9ZGVmYXVsdDpyZXR1cm4gR319dmFyIGs0PTA7ZnVuY3Rpb24gUShYLEcsSixZLHEsWil7R3x8KEc9e30pO3ZhciAkLFYsSz1HO2lmKCJyZWYiaW4gSylmb3IoViBpbiBLPXt9LEcpVj09InJlZiI/JD1HW1ZdOktbVl09R1tWXTt2YXIgXz17dHlwZTpYLHByb3BzOkssa2V5OkoscmVmOiQsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tazQsX19pOi0xLF9fdTowLF9fc291cmNlOnEsX19zZWxmOlp9O2lmKHR5cGVvZiBYPT0iZnVuY3Rpb24iJiYoJD1YLmRlZmF1bHRQcm9wcykpZm9yKFYgaW4gJClLW1ZdPT09dm9pZCAwJiYoS1tWXT0kW1ZdKTtyZXR1cm4gSS52bm9kZSYmSS52bm9kZShfKSxffXZhciB3OD1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLFQ0PTMsRTQ9NCxDND01O2Z1bmN0aW9uIGsxKHt1cmw6WCx3c1VybDpHLHN0eWxlOkosaW1hZ2VTdHlsZTpZLGNsYXNzTmFtZTpxLG9uSG9tZVByZXNzOlosb25TdHJlYW1Ub3VjaDokLG9uU3RyZWFtTXVsdGlUb3VjaDpWLG9uU3RyZWFtQnV0dG9uOkssc3Vic2NyaWJlRnJhbWU6XyxzdHJlYW1GcmFtZTpILHN0cmVhbUNvbmZpZzp6LG9uU2NyZWVuQ29uZmlnQ2hhbmdlOkwsaGlkZUNvbnRyb2xzOkIsb25TdHJlYW1pbmdDaGFuZ2U6TSxjb25uZWN0aW9uUXVhbGl0eTpOfSl7bGV0IE89ISEkLFA9YihudWxsKSxBPWIobnVsbCksdj1iKG51bGwpLHk9YihudWxsKSxbdSxwXT1UKCExKSxbYyx6MF09VChudWxsKSxbcyx0XT1UKG51bGwpLGY9YihudWxsKSxnMD1iKEwpO2cwLmN1cnJlbnQ9TDtsZXQgUTE9YihudWxsKSxbVzAsWDBdPVQobnVsbCk7UigoKT0+e2xldCBGPVExLmN1cnJlbnQ7aWYoIUZ8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBXPW5ldyBSZXNpemVPYnNlcnZlcigoVSk9PntsZXQgdz1VWzBdPy5jb250ZW50UmVjdDtpZih3KVgwKHt3aWR0aDp3LndpZHRoLGhlaWdodDp3LmhlaWdodH0pfSk7cmV0dXJuIFcub2JzZXJ2ZShGKSwoKT0+Vy5kaXNjb25uZWN0KCl9LFtdKTtsZXRbJDEsXzFdPVQoMCksVTA9YigwKSxbbTEsczBdPVQoITEpLFkwPWIobnVsbCk7UigoKT0+e2lmKE49PT0icG9vciIpe2lmKHMwKCEwKSxZMC5jdXJyZW50KWNsZWFyVGltZW91dChZMC5jdXJyZW50KTtZMC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntzMCghMSksWTAuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKHMwKCExKSxZMC5jdXJyZW50KWNsZWFyVGltZW91dChZMC5jdXJyZW50KSxZMC5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihZMC5jdXJyZW50KWNsZWFyVGltZW91dChZMC5jdXJyZW50KX19LFtOXSk7bGV0IHgwPWAke1h9L3N0cmVhbS5tanBlZ2A7UigoKT0+e2YuY3VycmVudD1udWxsLHQobnVsbCl9LFtYXSk7bGV0IGswPWooKEYpPT57aWYoIUZ8fEYud2lkdGg8PTB8fEYuaGVpZ2h0PD0wKXJldHVybjtsZXQgVz1mLmN1cnJlbnQsVT1GLm9yaWVudGF0aW9uPT09dm9pZCAwJiZXPy5vcmllbnRhdGlvbj97Li4uRixvcmllbnRhdGlvbjpXLm9yaWVudGF0aW9ufTpGO2lmKFcmJlcud2lkdGg9PT1VLndpZHRoJiZXLmhlaWdodD09PVUuaGVpZ2h0JiZXLm9yaWVudGF0aW9uPT09VS5vcmllbnRhdGlvbilyZXR1cm47Zi5jdXJyZW50PVUsdChVKSxnMC5jdXJyZW50Py4oVSl9LFtdKSxUMD1iKE0pO1QwLmN1cnJlbnQ9TSxSKCgpPT57VDAuY3VycmVudD8uKHUpfSxbdV0pLFIoKCk9PntpZihPJiZ6KWswKHopfSxbTyx6LGswXSk7bGV0IEUwPWIoITEpO0UwLmN1cnJlbnQ9dTtsZXQgQzA9YihudWxsKTtSKCgpPT57aWYoIU98fCFfKXJldHVybjtsZXQgVz1zZXRUaW1lb3V0KCgpPT57aWYoIUUwLmN1cnJlbnQpejAoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxVPV8oKHcpPT57VTAuY3VycmVudCsrLHAwLmN1cnJlbnQ9RGF0ZS5ub3coKTtsZXQgQz1BLmN1cnJlbnQ7aWYoQyl7aWYoQzAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEMwLmN1cnJlbnQpO0MwLmN1cnJlbnQ9dyxDLnNyYz13fWlmKCFFMC5jdXJyZW50KWNsZWFyVGltZW91dChXKSxwKCEwKSx6MChudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KFcpLFU/LigpLEMwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChDMC5jdXJyZW50KSxDMC5jdXJyZW50PW51bGx9fSxbTyxfXSk7bGV0IFowPWooKEYpPT57bGV0IFc9WTEoZi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFU9WjEoVyxGLngsRi55KSx3PUYuZWRnZT09PXZvaWQgMD92b2lkIDA6cTkoVyxGLmVkZ2UpLEM9dz09PXZvaWQgMD97dHlwZTpGLnR5cGUsLi4uVX06e3R5cGU6Ri50eXBlLC4uLlUsZWRnZTp3fTtpZihPKXskPy4oQyk7cmV0dXJufWxldCBnPXkuY3VycmVudDtpZighZ3x8Zy5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShDKSkscj1uZXcgVWludDhBcnJheSgxK28ubGVuZ3RoKTtyWzBdPVQ0LHIuc2V0KG8sMSksZy5zZW5kKHIpfSxbTywkXSksdDA9aigoRik9PntpZihPKXtLPy4oRik7cmV0dXJufWxldCBXPXkuY3VycmVudDtpZighV3x8Vy5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBVPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOkZ9KSksdz1uZXcgVWludDhBcnJheSgxK1UubGVuZ3RoKTt3WzBdPUU0LHcuc2V0KFUsMSksVy5zZW5kKHcpfSxbTyxLXSksTDA9aigoRik9PntsZXQgVz1ZMShmLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sVT1aMShXLEYueDEsRi55MSksdz1aMShXLEYueDIsRi55MiksQz17dHlwZTpGLnR5cGUseDE6VS54LHkxOlUueSx4Mjp3LngseTI6dy55fTtpZihPKXtWPy4oQyk7cmV0dXJufWxldCBnPXkuY3VycmVudDtpZighZ3x8Zy5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShDKSkscj1uZXcgVWludDhBcnJheSgxK28ubGVuZ3RoKTtyWzBdPUM0LHIuc2V0KG8sMSksZy5zZW5kKHIpfSxbTyxWXSk7UigoKT0+e2lmKE8pcmV0dXJuO2xldCBGPW5ldyBBYm9ydENvbnRyb2xsZXIsVz0oKT0+e2ZldGNoKGAke1h9L2NvbmZpZ2Ase3NpZ25hbDpGLnNpZ25hbH0pLnRoZW4oKEsxKT0+SzEuanNvbigpKS50aGVuKChLMSk9PntrMChLMSl9KS5jYXRjaCgoKT0+e30pfTtXKCk7bGV0IFU9c2V0SW50ZXJ2YWwoVywxMDAwKSx3PUc/P1gucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLEM9bmV3IFdlYlNvY2tldCh3KTtDLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIix5LmN1cnJlbnQ9QyxDLm9ub3Blbj0oKT0+e3AoITApLHowKG51bGwpfSxDLm9uY2xvc2U9KCk9PntwKCExKX0sQy5vbmVycm9yPSgpPT57ejAoIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpLHAoITEpfTtsZXQgZz1uZXcgQWJvcnRDb250cm9sbGVyLG89c2V0SW50ZXJ2YWwoKCk9PntfMShVMC5jdXJyZW50KSxVMC5jdXJyZW50PTB9LDEwMDApLHI9ITEsRDk9c2V0VGltZW91dCgoKT0+e2lmKCFyKXowKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7bGV0IE45PShhd2FpdCBmZXRjaCh4MCx7c2lnbmFsOmcuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFOOSlyZXR1cm47bGV0IGcxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTphOCx2YWx1ZTp4MX09YXdhaXQgTjkucmVhZCgpO2lmKGE4KWJyZWFrO2lmKHgxKWZvcihsZXQgcDE9MDtwMTw9eDEubGVuZ3RoLWcxLmxlbmd0aDtwMSsrKXtsZXQgTzk9ITA7Zm9yKGxldCBXMT0wO1cxPGcxLmxlbmd0aDtXMSsrKWlmKHgxW3AxK1cxXSE9PWcxW1cxXSl7Tzk9ITE7YnJlYWt9aWYoTzkpe2lmKFUwLmN1cnJlbnQrKywhcilyPSEwLGNsZWFyVGltZW91dChEOSl9fX19Y2F0Y2h7fX0pKCksKCk9PntnLmFib3J0KCksRi5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoVSksY2xlYXJJbnRlcnZhbChvKSxjbGVhclRpbWVvdXQoRDkpLEMuY2xvc2UoKSx5LmN1cnJlbnQ9bnVsbH19LFtYLHgwLE8sazAsR10pO2xldCBwMD1iKDApO1IoKCk9PntpZighTylyZXR1cm47bGV0IEY9MjAwMCxXPSgpPT57bGV0IEM9cDAuY3VycmVudDtpZighQ3x8IUUwLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktQz5GKXAoITEpfSxVPXNldEludGVydmFsKCgpPT57XzEoVTAuY3VycmVudCksVTAuY3VycmVudD0wLFcoKX0sMTAwMCksdz0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pVygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdyksKCk9PntjbGVhckludGVydmFsKFUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHcpfX0sW09dKTtsZXQgVjE9aigoKT0+e3JldHVybiBPP0EuY3VycmVudDpQLmN1cnJlbnR9LFtPXSksSzA9aigoKT0+e3JldHVybiB2LmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9WMSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW1YxXSksUjA9aigoRixXKT0+e2xldCBVPUswKCk7aWYoIVUpcmV0dXJuO2xldCB3PShXLmNsaWVudFgtVS5sZWZ0KS9VLndpZHRoLEM9KFcuY2xpZW50WS1VLnRvcCkvVS5oZWlnaHQ7WjAoe3R5cGU6Rix4OncseTpDfSl9LFtLMCxaMF0pLEcwPWIoITEpLG49YighMSksZjA9YighMSksbjA9Yih7ZHg6MCxkeTowfSksdjA9YighMSksW2gwLHoxXT1UKCExKSxEPWIoe3g6MC41LHk6MC41fSksW2ssRV09VChudWxsKTtSKCgpPT57bGV0IEY9KFUpPT57aWYoVS5rZXk9PT0iQWx0Iil6MSghMCl9LFc9KFUpPT57aWYoVS5rZXk9PT0iQWx0Iil7aWYoejEoITEpLCFuLmN1cnJlbnQpRShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixXKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixGKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpfX0sW10pLFIoKCk9PntpZihoMCYmIW4uY3VycmVudCl7bGV0IEY9RC5jdXJyZW50O0Uoe3gxOkYueCx5MTpGLnkseDI6MS1GLngseTI6MS1GLnl9KX1lbHNlIGlmKCFoMCYmIW4uY3VycmVudClFKG51bGwpfSxbaDBdKTtsZXQgaD1iKG51bGwpLGk9YighMSksZD1iKDApLEQwPWooKEYsVyk9PntpLmN1cnJlbnQ9ITA7bGV0IFU9aC5jdXJyZW50O2lmKFUpY2FuY2VsQW5pbWF0aW9uRnJhbWUoZC5jdXJyZW50KSxkLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VS5zdHlsZS5sZWZ0PWAke0YqMTAwfSVgLFUuc3R5bGUudG9wPWAke1cqMTAwfSVgLFUuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxKMD1qKChGLFcpPT57aWYoIWkuY3VycmVudClyZXR1cm47bGV0IFU9aC5jdXJyZW50O2lmKFUpY2FuY2VsQW5pbWF0aW9uRnJhbWUoZC5jdXJyZW50KSxkLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VS5zdHlsZS5sZWZ0PWAke0YqMTAwfSVgLFUuc3R5bGUudG9wPWAke1cqMTAwfSVgfSl9LFtdKSxxMD1qKCgpPT57aS5jdXJyZW50PSExO2xldCBGPWguY3VycmVudDtpZihGKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGQuY3VycmVudCksRi5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLEgwPWIoMCksUDA9YihudWxsKSxkMD1qKCgpPT57bGV0IEY9RGF0ZS5ub3coKSxXPUYtSDAuY3VycmVudDtpZihIMC5jdXJyZW50PUYsVzwzMDApe2lmKFAwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFAwLmN1cnJlbnQpLFAwLmN1cnJlbnQ9bnVsbDtpZihaKVooKTtlbHNlIHQwKCJhcHBfc3dpdGNoZXIiKX1lbHNlIFAwLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2lmKFopWigpO2Vsc2UgdDAoImhvbWUiKTtQMC5jdXJyZW50PW51bGx9LDMwMCl9LFt0MCxaXSksbTA9WTEocyksTjA9bTAuZGlzcGxheUNvbmZpZyxCMD0oKCk9PntpZighTjB8fCFXMClyZXR1cm4gbnVsbDtpZihXMC53aWR0aD09PTB8fFcwLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IEY9TWF0aC5taW4oVzAud2lkdGgvTjAud2lkdGgsVzAuaGVpZ2h0L04wLmhlaWdodCk7cmV0dXJue3dpZHRoOk4wLndpZHRoKkYsaGVpZ2h0Ok4wLmhlaWdodCpGfX0pKCksdTA9bTAucm90YXRpb25EZWdyZWVzLEg5PW0wLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKHUwKT09PTkwLEI5PVksRjk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6SDkmJkIwP2Ake0IwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpIOSYmQjA/YCR7QjAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7dTA9PT0wPyIiOmAgcm90YXRlKCR7dTB9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjp3OCxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlksLi4udTA9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fTtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkI/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpxLGNoaWxkcmVuOltRKCJkaXYiLHtyZWY6UTEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46USgiZGl2Iix7cmVmOnYsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6QjA/YCR7QjAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6QjA/YCR7QjAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOkI5Py5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6Qjk/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbUSgiaW1nIix7cmVmOlAsc3JjOk8/dm9pZCAwOngwLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEYpPT57bGV0IFc9Ri5jdXJyZW50VGFyZ2V0O2lmKFcubmF0dXJhbFdpZHRoPjAmJlcubmF0dXJhbEhlaWdodD4wKWswKHt3aWR0aDpXLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Vy5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOk8/e2Rpc3BsYXk6Im5vbmUifTpGOX0pLE8mJlEoImltZyIse3JlZjpBLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEYpPT57bGV0IFc9Ri5jdXJyZW50VGFyZ2V0O2lmKFcubmF0dXJhbFdpZHRoPjAmJlcubmF0dXJhbEhlaWdodD4wKWswKHt3aWR0aDpXLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Vy5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkY5fSksUSgiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6dzgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooRik9PntGLnByZXZlbnREZWZhdWx0KCk7bGV0IFc9SzAoKTtpZighVylyZXR1cm47bGV0IFU9KEYuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsdz0oRi5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtpZihGLmFsdEtleSl7bi5jdXJyZW50PSEwLGYwLmN1cnJlbnQ9Ri5zaGlmdEtleTtsZXQgQz17eDE6VSx5MTp3LHgyOjEtVSx5MjoxLXd9O24wLmN1cnJlbnQ9e2R4OjEtVS1VLGR5OjEtdy13fSxFKEMpLEwwKHt0eXBlOiJiZWdpbiIsLi4uQ30pO3JldHVybn1pZihEMChVLHcpLHc+MC44OClHMC5jdXJyZW50PSEwLFowKHt0eXBlOiJiZWdpbiIseDpVLHk6dyxlZGdlOnkwfSk7ZWxzZSBHMC5jdXJyZW50PSExLFIwKCJiZWdpbiIsRil9LG9uTW91c2VNb3ZlOihGKT0+e2xldCBXPUswKCk7aWYoIVcpcmV0dXJuO2xldCBVPShGLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLHc9KEYuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYoRC5jdXJyZW50PXt4OlUseTp3fSxGLmJ1dHRvbnM9PT0wKXtpZihGLmFsdEtleSlFKHt4MTpVLHkxOncseDI6MS1VLHkyOjEtd30pO3JldHVybn1pZihuLmN1cnJlbnQpe2xldCBDO2lmKGYwLmN1cnJlbnQpe2xldCBnPW4wLmN1cnJlbnQ7Qz17eDE6VSx5MTp3LHgyOlUrZy5keCx5Mjp3K2cuZHl9fWVsc2UgQz17eDE6VSx5MTp3LHgyOjEtVSx5MjoxLXd9O0UoQyksTDAoe3R5cGU6Im1vdmUiLC4uLkN9KTtyZXR1cm59aWYoSjAoVSx3KSxHMC5jdXJyZW50KVowKHt0eXBlOiJtb3ZlIix4OlUseTp3LGVkZ2U6eTB9KTtlbHNlIFIwKCJtb3ZlIixGKX0sb25Nb3VzZVVwOihGKT0+e2lmKG4uY3VycmVudCl7bGV0IFc9SzAoKTtpZihXKXtsZXQgVT0oRi5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx3PShGLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O2lmKGYwLmN1cnJlbnQpe2xldCBDPW4wLmN1cnJlbnQ7TDAoe3R5cGU6ImVuZCIseDE6VSx5MTp3LHgyOlUrQy5keCx5Mjp3K0MuZHl9KX1lbHNlIEwwKHt0eXBlOiJlbmQiLHgxOlUseTE6dyx4MjoxLVUseTI6MS13fSl9aWYobi5jdXJyZW50PSExLCFGLmFsdEtleSlFKG51bGwpO3JldHVybn1pZihxMCgpLEcwLmN1cnJlbnQpe2xldCBXPUswKCk7aWYoVyl7bGV0IFU9KEYuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgsdz0oRi5jbGllbnRZLVcudG9wKS9XLmhlaWdodDtaMCh7dHlwZToiZW5kIix4OlUseTp3LGVkZ2U6eTB9KX1HMC5jdXJyZW50PSExO3JldHVybn1SMCgiZW5kIixGKX0sb25Nb3VzZUxlYXZlOihGKT0+e2lmKG4uY3VycmVudCl7aWYoaylMMCh7dHlwZToiZW5kIiwuLi5rfSk7bi5jdXJyZW50PSExLEUobnVsbCk7cmV0dXJufWlmKHEwKCksRzAuY3VycmVudCl7bGV0IFc9SzAoKTtpZihXKXtsZXQgVT0oRi5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx3PShGLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O1owKHt0eXBlOiJlbmQiLHg6VSx5OncsZWRnZTp5MH0pfUcwLmN1cnJlbnQ9ITE7cmV0dXJufWlmKEYuYnV0dG9ucz4wKVIwKCJlbmQiLEYpO0UobnVsbCl9LG9uVG91Y2hTdGFydDooRik9PntGLnByZXZlbnREZWZhdWx0KCk7bGV0IFc9SzAoKTtpZighVylyZXR1cm47aWYoRi50b3VjaGVzLmxlbmd0aD49Mil7cTAoKTtsZXQgZz1GLnRvdWNoZXNbMF0sbz1GLnRvdWNoZXNbMV0scj17eDE6KGcuY2xpZW50WC1XLmxlZnQpL1cud2lkdGgseTE6KGcuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQseDI6KG8uY2xpZW50WC1XLmxlZnQpL1cud2lkdGgseTI6KG8uY2xpZW50WS1XLnRvcCkvVy5oZWlnaHR9O2lmKCF2MC5jdXJyZW50JiYhRzAuY3VycmVudClaMCh7dHlwZToiZW5kIix4OnIueDEseTpyLnkxfSk7djAuY3VycmVudD0hMCxuLmN1cnJlbnQ9ITAsRzAuY3VycmVudD0hMSxFKHIpLEwwKHt0eXBlOiJiZWdpbiIsLi4ucn0pO3JldHVybn1sZXQgVT1GLnRvdWNoZXNbMF07aWYoIVUpcmV0dXJuO2xldCB3PShVLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLEM9KFUuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYoRDAodyxDKSxDPjAuODgpRzAuY3VycmVudD0hMCxaMCh7dHlwZToiYmVnaW4iLHg6dyx5OkMsZWRnZTp5MH0pO2Vsc2UgRzAuY3VycmVudD0hMSxaMCh7dHlwZToiYmVnaW4iLHg6dyx5OkN9KX0sb25Ub3VjaE1vdmU6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBXPUswKCk7aWYoIVcpcmV0dXJuO2lmKHYwLmN1cnJlbnQmJkYudG91Y2hlcy5sZW5ndGg+PTIpe2xldCBnPUYudG91Y2hlc1swXSxvPUYudG91Y2hlc1sxXSxyPXt4MTooZy5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx5MTooZy5jbGllbnRZLVcudG9wKS9XLmhlaWdodCx4Mjooby5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx5Mjooby5jbGllbnRZLVcudG9wKS9XLmhlaWdodH07RShyKSxMMCh7dHlwZToibW92ZSIsLi4ucn0pO3JldHVybn1sZXQgVT1GLnRvdWNoZXNbMF07aWYoIVUpcmV0dXJuO2xldCB3PShVLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLEM9KFUuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYoSjAodyxDKSxHMC5jdXJyZW50KVowKHt0eXBlOiJtb3ZlIix4OncseTpDLGVkZ2U6eTB9KTtlbHNlIFowKHt0eXBlOiJtb3ZlIix4OncseTpDfSl9LG9uVG91Y2hFbmQ6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCBXPUswKCk7aWYoIVcpcmV0dXJuO2lmKHYwLmN1cnJlbnQpe2lmKEYudG91Y2hlcy5sZW5ndGg8Mil7bGV0IGc9Ri5jaGFuZ2VkVG91Y2hlc1swXSxvPWs7aWYoZyYmbylMMCh7dHlwZToiZW5kIix4MTooZy5jbGllbnRYLVcubGVmdCkvVy53aWR0aCx5MTooZy5jbGllbnRZLVcudG9wKS9XLmhlaWdodCx4MjpvLngyLHkyOm8ueTJ9KTtlbHNlIGlmKG8pTDAoe3R5cGU6ImVuZCIsLi4ub30pO3YwLmN1cnJlbnQ9ITEsbi5jdXJyZW50PSExLEUobnVsbCl9cmV0dXJufWxldCBVPUYuY2hhbmdlZFRvdWNoZXNbMF07aWYoIVUpcmV0dXJuO2xldCB3PShVLmNsaWVudFgtVy5sZWZ0KS9XLndpZHRoLEM9KFUuY2xpZW50WS1XLnRvcCkvVy5oZWlnaHQ7aWYocTAoKSxHMC5jdXJyZW50KVowKHt0eXBlOiJlbmQiLHg6dyx5OkMsZWRnZTp5MH0pLEcwLmN1cnJlbnQ9ITE7ZWxzZSBaMCh7dHlwZToiZW5kIix4OncseTpDfSl9fSksUSgiZGl2Iix7cmVmOmgsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxrJiZRKGEse2NoaWxkcmVuOltRKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpUOChrLngxLGsueTEpfSksUSgiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VDgoay54MixrLnkyKX0pXX0pLCF1JiYhYyYmUSgiZGl2Iix7c3R5bGU6ey4uLkk4LC4uLll8fHt9fSxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxjJiZRKCJkaXYiLHtzdHlsZTpJOCxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46Y30pfSksbTEmJlEoImRpdiIse3N0eWxlOlI0LGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFCJiZRKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltRKCJidXR0b24iLHtvbkNsaWNrOmQwLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiQxPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltOJiZRKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Tj09PSJnb29kIj8iIzRhZGU4MCI6Tj09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSwkMSwiIGZwcyJdfSldfSldfSl9dmFyIFI0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sSTg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LGs4PTIwO2Z1bmN0aW9uIFQ4KFgsRyl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtYKjEwMH0lYCx0b3A6YCR7RyoxMDB9JWAsd2lkdGg6azgsaGVpZ2h0Oms4LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIGwwKFgpe2lmKCFYKXJldHVybiJpcGhvbmUiO2xldCBHPVgudG9Mb3dlckNhc2UoKTtpZihHLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKEcuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihHLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgRjA9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LEtYPUYwLmlwaG9uZS53aWR0aCxXWD1GMC5pcGhvbmUuaGVpZ2h0LExYPUYwLmlwaG9uZS5iZXplbFgsSFg9RjAuaXBob25lLmJlemVsWSxCWD1GMC5pcGhvbmUuaW5uZXJSYWRpdXMsRTg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBUMShYLEcpe2xldCBKPVgmJlgud2lkdGg+MCYmWC5oZWlnaHQ+MD9YOkcsWT1JMShKKTtpZihZKXJldHVybmAke1kud2lkdGh9IC8gJHtZLmhlaWdodH1gO3JldHVybmAke0YwLmlwaG9uZS53aWR0aC0yKkYwLmlwaG9uZS5iZXplbFh9IC8gJHtGMC5pcGhvbmUuaGVpZ2h0LTIqRjAuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIEUxKFg9ImlwaG9uZSIsRyl7bGV0IEo9Rz9FOFtHXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IFk9RjBbWF07cmV0dXJue3dpZHRoOlkud2lkdGgtMipZLmJlemVsWCxoZWlnaHQ6WS5oZWlnaHQtMipZLmJlemVsWX19ZnVuY3Rpb24gQzEoWD0iaXBob25lIixHKXtpZihKMShHKSlzd2l0Y2goWCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChYKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIFIxKFg9ImlwaG9uZSIsRyl7bGV0IEo9RjBbWF0sWT1KLndpZHRoLTIqSi5iZXplbFgscT1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKFk8cSYmSjEoRykpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9xKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1kqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvWSoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9xKjEwMH0lYH12YXIgUTk9dzAobnVsbCk7ZnVuY3Rpb24gYjEoWCl7bGV0IEc9UzAoUTkpO2lmKCFHKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4ke1h9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gR312YXIgeTQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiB2NCh7ZXhlYzpYLG9uUm90YXRlOkcsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlksZGV2aWNlTmFtZTpxLGRldmljZVJ1bnRpbWU6WixzdHJlYW1pbmc6JD0hMSxkaXNhYmxlZDpWPSExLGNoaWxkcmVuOkssc3R5bGU6XywuLi5IfSl7bGV0IHo9bDAocSksQj17ZXhlYzpYLG9uUm90YXRlOkcsb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlksZGV2aWNlTmFtZTpxLGRldmljZVJ1bnRpbWU6WixkZXZpY2VUeXBlOnosc3RyZWFtaW5nOiQsZGlzYWJsZWQ6Vnx8IVl8fCEkfTtyZXR1cm4gUShROS5Qcm92aWRlcix7dmFsdWU6QixjaGlsZHJlbjpRKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLnk0LC4uLl99LC4uLkgsY2hpbGRyZW46S30pfSl9dmFyIGg0PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxtND1hMChmdW5jdGlvbih7bmFtZTpHLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WSxzdHlsZTpxLG9uTW91c2VFbnRlcjpaLG9uTW91c2VMZWF2ZTokLC4uLlZ9LEspe2xldCBfPWIxKCJUaXRsZSIpLFtILHpdPVQoITEpLEw9Rz8/Xy5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixCPUo/PyhfLmRldmljZVJ1bnRpbWU/Xy5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOkssdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihNKT0+e3ooITApLFo/LihNKX0sb25Nb3VzZUxlYXZlOihNKT0+e3ooITEpLCQ/LihNKX0sc3R5bGU6ey4uLmg0LGJhY2tncm91bmQ6SD8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLnF9LC4uLlYsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbTCwhWSYmUSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpRKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpCfSldfSl9KSxnND17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIHg0KHtzdHlsZTpYLC4uLkd9KXtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLmc0LC4uLlh9LC4uLkd9KX12YXIgcDQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIn0sajE9YTAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6RyxzdHlsZTpKLGRpc2FibGVkOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlosY2hpbGRyZW46JCwuLi5WfSxLKXtsZXQgXz1TMChROSksSD1ZfHxHfHxfPy5kaXNhYmxlZCxbeixMXT1UKCExKTtyZXR1cm4gUSgiYnV0dG9uIix7cmVmOkssdHlwZToiYnV0dG9uIixkaXNhYmxlZDpILG9uTW91c2VFbnRlcjooQik9PntMKCEwKSxxPy4oQil9LG9uTW91c2VMZWF2ZTooQik9PntMKCExKSxaPy4oQil9LHN0eWxlOnsuLi5wNCxjb2xvcjpIPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOnomJiFIPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkg/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uSn0sLi4uVixjaGlsZHJlbjokfSl9KTtmdW5jdGlvbiBmNCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoRyk9PmAtZSAnJHtHfSdgKS5yZWR1Y2UoKEcsSik9PmAke0d9ICR7Sn1gLCJvc2FzY3JpcHQiKX12YXIgZDQ9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sdTQ9USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLGM0PVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTE0LjUgNGgtNUw3IDdINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtM3oifSksUSgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjQifSldfSksaTQ9USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMTIgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTEwLjIzMDUgMTIuODA3N0g0LjQyMzgzQzMuOTIzODMgMTIuODA3NyAzLjU0Njg4IDEyLjY4NDYgMy4yOTI5NyAxMi40Mzg1QzMuMDQyOTcgMTIuMTk2MyAyLjkxNzk3IDExLjgxOTQgMi45MTc5NyAxMS4zMDc3VjUuNTEyNzRDMi45MTc5NyA0Ljk5NzExIDMuMDQyOTcgNC42MTgyMSAzLjI5Mjk3IDQuMzc2MDJDMy41NDY4OCA0LjEyOTkzIDMuOTIzODMgNC4wMDY4OCA0LjQyMzgzIDQuMDA2ODhIMTAuMjMwNUMxMC43MzQ0IDQuMDA2ODggMTEuMTExMyA0LjEyOTkzIDExLjM2MTMgNC4zNzYwMkMxMS42MTEzIDQuNjE4MjEgMTEuNzM2MyA0Ljk5NzExIDExLjczNjMgNS41MTI3NFYxMS4zMDc3QzExLjczNjMgMTEuODE5NCAxMS42MTEzIDEyLjE5NjMgMTEuMzYxMyAxMi40Mzg1QzExLjExMTMgMTIuNjg0NiAxMC43MzQ0IDEyLjgwNzcgMTAuMjMwNSAxMi44MDc3Wk0xMC4yMTI5IDExLjg2NDNDMTAuNDE2IDExLjg2NDMgMTAuNTYyNSAxMS44MTk0IDEwLjY1MjMgMTEuNzI5NUMxMC43NDYxIDExLjY0MzYgMTAuNzkzIDExLjQ5NzEgMTAuNzkzIDExLjI5MDFWNS41MjQ0NkMxMC43OTMgNS4zMTc0MyAxMC43NDYxIDUuMTcwOTQgMTAuNjUyMyA1LjA4NTAxQzEwLjU2MjUgNC45OTUxNiAxMC40MTYgNC45NTAyNCAxMC4yMTI5IDQuOTUwMjRINC40NDE0MUM0LjI0MjE5IDQuOTUwMjQgNC4wOTU3IDQuOTk1MTYgNC4wMDE5NSA1LjA4NTAxQzMuOTA4MiA1LjE3MDk0IDMuODYxMzMgNS4zMTc0MyAzLjg2MTMzIDUuNTI0NDZWMTEuMjkwMUMzLjg2MTMzIDExLjQ5NzEgMy45MDgyIDExLjY0MzYgNC4wMDE5NSAxMS43Mjk1QzQuMDk1NyAxMS44MTk0IDQuMjQyMTkgMTEuODY0MyA0LjQ0MTQxIDExLjg2NDNIMTAuMjEyOVpNMi45MTc5NyAyLjU4MzA1VjAuNDE1MDgzQzIuOTE3OTcgMC4yMDAyNCAyLjk4NjMzIDAuMDY5MzgwMyAzLjEyMzA1IDAuMDIyNTA1M0MzLjI1OTc3IC0wLjAyODI3NTkgMy40MTAxNiAwLjAwNjg4MDMzIDMuNTc0MjIgMC4xMjc5NzRMNS4wNTA3OCAxLjIxMTk2QzUuMTc1NzggMS4zMDU3MSA1LjIzODI4IDEuNDAxNDEgNS4yMzgyOCAxLjQ5OTA3QzUuMjM4MjggMS41OTY3MiA1LjE3NTc4IDEuNjkyNDMgNS4wNTA3OCAxLjc4NjE4TDMuNTc0MjIgMi44NjQzQzMuNDEwMTYgMi45ODU0IDMuMjU5NzcgMy4wMjI1MSAzLjEyMzA1IDIuOTc1NjNDMi45ODYzMyAyLjkyNDg1IDIuOTE3OTcgMi43OTM5OSAyLjkxNzk3IDIuNTgzMDVaTTMuNTMzMiAxLjE1MzM2QzMuNjI2OTUgMS4xNTMzNiAzLjcwNzAzIDEuMTg2NTcgMy43NzM0NCAxLjI1Mjk3QzMuODQzNzUgMS4zMTkzOCAzLjg3ODkxIDEuMzk3NTEgMy44Nzg5MSAxLjQ4NzM1QzMuODc4OTEgMS41ODExIDMuODQzNzUgMS42NjMxMyAzLjc3MzQ0IDEuNzMzNDRDMy43MDcwMyAxLjc5OTg1IDMuNjI2OTUgMS44MzMwNSAzLjUzMzIgMS44MzMwNUgyLjgwNjY0QzIuMzgwODYgMS44MzMwNSAyLjAxMTcyIDEuOTI0ODUgMS42OTkyMiAyLjEwODQ0QzEuMzkwNjIgMi4yODgxMyAxLjE1MjM0IDIuNTM4MTMgMC45ODQzNzUgMi44NTg0NEMwLjgxNjQwNiAzLjE3ODc2IDAuNzMyNDIyIDMuNTQ1OTQgMC43MzI0MjIgMy45NjAwMVY0LjgzODkxQzAuNzMyNDIyIDQuOTM2NTcgMC42OTcyNjYgNS4wMjI1MSAwLjYyNjk1MyA1LjA5NjcyQzAuNTUyNzM0IDUuMTY3MDQgMC40NjQ4NDQgNS4yMDIxOSAwLjM2MzI4MSA1LjIwMjE5QzAuMjY1NjI1IDUuMjAyMTkgMC4xODE2NDEgNS4xNjcwNCAwLjExMTMyOCA1LjA5NjcyQzAuMDM3MTA5NCA1LjAyMjUxIDAgNC45MzY1NyAwIDQuODM4OTFWMy45NjAwMUMwIDMuNDAxNDEgMC4xMTcxODggMi45MTExOCAwLjM1MTU2MiAyLjQ4OTNDMC41ODIwMzEgMi4wNjc0MyAwLjkwODIwMyAxLjczOTMgMS4zMzAwOCAxLjUwNDkzQzEuNzQ4MDUgMS4yNzA1NSAyLjIzODI4IDEuMTUzMzYgMi44MDA3OCAxLjE1MzM2SDMuNTMzMloifSl9KSxhND1hMChmdW5jdGlvbih7b25DbGljazpHLC4uLkp9LFkpe2xldCBxPWIxKCJIb21lQnV0dG9uIik7cmV0dXJuIFEoajEse3JlZjpZLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWik9PntpZihHPy4oWiksWi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihxLmRldmljZVR5cGU9PT0id2F0Y2giKXEuZXhlYyhmNCgpKTtlbHNlIHEuZXhlYygic2VydmUtc2ltIGJ1dHRvbiBob21lIil9LC4uLkosY2hpbGRyZW46dTR9KX0pLGw0PWEwKGZ1bmN0aW9uKHtvbkNsaWNrOkcsLi4uSn0sWSl7bGV0IHE9YjEoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gUShqMSx7cmVmOlksImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihaKT0+e2lmKEc/LihaKSxaLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKHEuZGV2aWNlVWRpZClxLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke3EuZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46YzR9KX0pLG80PWEwKGZ1bmN0aW9uKHtvbkNsaWNrOkcsZm9yY2VEaXNhYmxlZDpKLC4uLll9LHEpe2xldCBaPWIxKCJSb3RhdGVCdXR0b24iKSwkPVouZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFouZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtWLEtdPVQoInBvcnRyYWl0Iik7cmV0dXJuIFIoKCk9PntLKFoub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbWi5kZXZpY2VVZGlkLFoub3JpZW50YXRpb25dKSxRKGoxLHtyZWY6cSwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8JCxvbkNsaWNrOihfKT0+e2lmKEc/LihfKSxfLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFaLmRldmljZVVkaWR8fCQpcmV0dXJuO2xldCBIPWQ0W1oub3JpZW50YXRpb24/P1ZdO2lmKEsoSCksWi5vblJvdGF0ZSlaLm9uUm90YXRlKEgpO2Vsc2UgWi5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7SH0gLWQgJHtaLmRldmljZVVkaWR9YCl9LC4uLlksY2hpbGRyZW46aTR9KX0pLFEwPXY0O1EwLlRpdGxlPW00O1EwLkFjdGlvbnM9eDQ7UTAuQnV0dG9uPWoxO1EwLkhvbWVCdXR0b249YTQ7UTAuU2NyZWVuc2hvdEJ1dHRvbj1sNDtRMC5Sb3RhdGVCdXR0b249bzQ7ZnVuY3Rpb24gcjQoWCl7bGV0W0csSl09VChudWxsKSxZPWIobmV3IFNldCkscT1qKChaKT0+e3JldHVybiBZLmN1cnJlbnQuYWRkKFopLCgpPT57WS5jdXJyZW50LmRlbGV0ZShaKX19LFtdKTtyZXR1cm4gUigoKT0+e2lmKCFYKXJldHVybjtsZXQgWj1uZXcgQWJvcnRDb250cm9sbGVyLCQ9ITEsVj1udWxsLEs9WC5yZXBsYWNlKC9cL3N0cmVhbVwubWpwZWckLywiIiksXz0oTyk9PntpZihPLndpZHRoPD0wfHxPLmhlaWdodDw9MClyZXR1cm47SigoUCk9PlAmJlAud2lkdGg9PT1PLndpZHRoJiZQLmhlaWdodD09PU8uaGVpZ2h0JiZQLm9yaWVudGF0aW9uPT09Ty5vcmllbnRhdGlvbj9QOk8pfSxIPSgpPT57ZmV0Y2goYCR7S30vY29uZmlnYCx7c2lnbmFsOlouc2lnbmFsfSkudGhlbigoTyk9Pk8uanNvbigpKS50aGVuKF8pLmNhdGNoKCgpPT57fSl9O0goKTtsZXQgej1zZXRJbnRlcnZhbChILDEwMDApLEw9bmV3IFVSTChYKTtMLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgQj1MLnRvU3RyaW5nKCksTT0oKT0+e2lmKCR8fFouc2lnbmFsLmFib3J0ZWR8fFYpcmV0dXJuO1Y9c2V0VGltZW91dCgoKT0+e1Y9bnVsbCxOKCl9LDEwMDApfSxOPWFzeW5jKCk9Pnt0cnl7bGV0IFA9KGF3YWl0IGZldGNoKEIse3NpZ25hbDpaLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighUCl7TSgpO3JldHVybn1sZXQgQT1uZXcgVWludDhBcnJheSgwKTt3aGlsZSghMCl7bGV0e2RvbmU6dix2YWx1ZTp5fT1hd2FpdCBQLnJlYWQoKTtpZih2KWJyZWFrO2xldCB1PW5ldyBVaW50OEFycmF5KEEubGVuZ3RoK3kubGVuZ3RoKTt1LnNldChBKSx1LnNldCh5LEEubGVuZ3RoKSxBPXU7d2hpbGUoITApe2xldCBwPS0xO2ZvcihsZXQgZj0wO2Y8QS5sZW5ndGgtMTtmKyspaWYoQVtmXT09PTI1NSYmQVtmKzFdPT09MjE2KXtwPWY7YnJlYWt9aWYocD09PS0xKWJyZWFrO2xldCBjPS0xO2ZvcihsZXQgZj1wKzI7ZjxBLmxlbmd0aC0xO2YrKylpZihBW2ZdPT09MjU1JiZBW2YrMV09PT0yMTcpe2M9ZisyO2JyZWFrfWlmKGM9PT0tMSlicmVhaztsZXQgejA9QS5zbGljZShwLGMpO0E9QS5zbGljZShjKTtsZXQgcz1uZXcgQmxvYihbejBdLHt0eXBlOiJpbWFnZS9qcGVnIn0pLHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChzKTtpZihZLmN1cnJlbnQuc2l6ZT09PTApe1VSTC5yZXZva2VPYmplY3RVUkwodCk7Y29udGludWV9Zm9yKGxldCBmIG9mIFkuY3VycmVudClmKHQpfX19Y2F0Y2h7fWZpbmFsbHl7TSgpfX07cmV0dXJuIE4oKSwoKT0+e2lmKCQ9ITAsViljbGVhclRpbWVvdXQoVik7Wi5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoeil9fSxbWF0pLHtzdWJzY3JpYmVGcmFtZTpxLGZyYW1lOm51bGwsY29uZmlnOkd9fXZhciBzND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gdDQoWCl7cmV0dXJuIHM0W1hdPz9udWxsfWZ1bmN0aW9uIHIwKFgpe2xldCBHPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8iLyI7cmV0dXJuIEc9PT0iLyI/YC8ke1h9YDpgJHtHfS8ke1h9YH1mdW5jdGlvbiBiOChYKXtyZXR1cm4gWD8uZXJyb3JzPy5pbmNsdWRlcyhfOCk/PyExfWZ1bmN0aW9uIGo4KHtzaXplOlg9MTgsc3Ryb2tlV2lkdGg6Rz0yfSl7cmV0dXJuIFEoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6WCxoZWlnaHQ6WCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDpHLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCJ9KSxRKCJwYXRoIix7ZDoiTTMgM3Y1aDUifSldfSl9ZnVuY3Rpb24gbjQoWCl7bGV0W0csSl09VChudWxsKSxbWSxxXT1UKCJBWCBvZmYiKTtyZXR1cm4gUigoKT0+e2lmKCFYKXtKKG51bGwpLHEoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLHEoIkFYIHdhaXRpbmciKTtsZXQgWj1uZXcgRXZlbnRTb3VyY2UoWCk7cmV0dXJuIFoub25tZXNzYWdlPSgkKT0+e3RyeXtsZXQgVj1KU09OLnBhcnNlKCQuZGF0YSk7SihWKSxxKGI4KFYpPyJBWCB1bmF2YWlsYWJsZTogaW5zdGFsbCBBWGUiOmAke1YuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe3EoIkFYIHBhcnNlIGVycm9yIil9fSxaLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e3EoIkFYIHJlY29ubmVjdGluZyIpfSksKCk9PlouY2xvc2UoKX0sW1hdKSx7c25hcHNob3Q6RyxzdGF0dXM6WX19dmFyIFM4PXcwKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLHk4PXcwKG51bGwpO2Z1bmN0aW9uIFc5KCl7cmV0dXJuIFMwKFM4KX1mdW5jdGlvbiB2OCgpe2xldCBYPVMwKHk4KTtpZighWCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gWH1mdW5jdGlvbiBlNCh7ZW5kcG9pbnQ6WCxjaGlsZHJlbjpHfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOll9PW40KFgpLFtxLFpdPVQobnVsbCksWyQsVl09VChudWxsKTtSKCgpPT57aWYoIVgpWihudWxsKSxWKG51bGwpfSxbWF0pO2xldCBLPWowKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOll9KSxbSixZXSksXz1qMCgoKT0+KHtoaWdobGlnaHRlZEtleTpxLHNlbGVjdGVkS2V5OiQsc2V0SGlnaGxpZ2h0ZWRLZXk6WixzZXRTZWxlY3RlZEtleTpWfSksW3EsJF0pO3JldHVybiBRKFM4LlByb3ZpZGVyLHt2YWx1ZTpLLGNoaWxkcmVuOlEoeTguUHJvdmlkZXIse3ZhbHVlOl8sY2hpbGRyZW46R30pfSl9YXN5bmMgZnVuY3Rpb24gJDAoWCl7cmV0dXJuKGF3YWl0IGZldGNoKHIwKCJleGVjIikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOlh9KX0pKS5qc29uKCl9ZnVuY3Rpb24gWDYoWCxHKXtsZXRbSixZXT1UKFtdKSxbcSxaXT1UKG51bGwpLFskLFZdPVQoITEpLEs9aihhc3luYygpPT57aWYoIVgpcmV0dXJuO1YoITApLFoobnVsbCk7dHJ5e2xldCBfPWF3YWl0IGZldGNoKFgse2NhY2hlOiJuby1zdG9yZSJ9KSxIPWF3YWl0IF8uanNvbigpO2lmKCFfLm9rfHxILmVycm9yKXRocm93IEVycm9yKEguZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO1koSC50YXJnZXRzPz9bXSl9Y2F0Y2goXyl7WihfIGluc3RhbmNlb2YgRXJyb3I/Xy5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgV2ViS2l0IERldlRvb2xzIil9ZmluYWxseXtWKCExKX19LFtYXSk7cmV0dXJuIFIoKCk9PntpZighRylyZXR1cm47SygpO2xldCBfPXNldEludGVydmFsKCgpPT52b2lkIEsoKSwyNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChfKX0sW0csS10pLHt0YXJnZXRzOkosZXJyb3I6cSxsb2FkaW5nOiQscmVmcmVzaDpLfX1mdW5jdGlvbiBHNihYKXtsZXQgRz1YLmNvbnRlbnREb2N1bWVudDtpZighRylyZXR1cm47bGV0IEo9KCk9PntsZXQgWj1bR107d2hpbGUoWi5sZW5ndGgpe2xldCAkPVoucG9wKCksVj0kLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBLIG9mIFYpe2xldCBfPUsuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fEsudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChfKSlyZXR1cm4gS31mb3IobGV0IEsgb2YgJC5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoSy5zaGFkb3dSb290KVoucHVzaChLLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxZPTAscT0oKT0+e1krKztsZXQgWj1KKCk7aWYoWiYmWi5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7Wi5jbGljaygpO3JldHVybn1pZihZPDIwKXNldFRpbWVvdXQocSwxMDApfTtxKCl9dmFyIHExPW5ldyBNYXA7ZnVuY3Rpb24gSjYoWCxHKXtsZXQgSj1gJHtYfToke0d9YCxZPXExLmdldChKKTtpZihZIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWSk7bGV0IHE9aDgoJDAsWCxHKS50aGVuKChaKT0+e2xldCAkPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIHExLnNldChKLCQpLCR9KS5jYXRjaCgoKT0+e3JldHVybiBxMS5zZXQoSixudWxsKSxudWxsfSk7cmV0dXJuIHExLnNldChKLHEpLHF9ZnVuY3Rpb24gWTYoWCxHKXtsZXRbSixZXT1UKHt9KSxxPWowKCgpPT5HLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbR10pO3JldHVybiBSKCgpPT57aWYoIVgpcmV0dXJuO2xldCBaPSExO2ZvcihsZXQgJCBvZiBHKXtpZighJCljb250aW51ZTtsZXQgVj1gJHtYfTokeyR9YCxLPXExLmdldChWKTtpZih0eXBlb2YgSz09PSJzdHJpbmcifHxLPT09bnVsbCl7WSgoXyk9Pl9bJF09PT1LP186ey4uLl8sWyRdOkt9KTtjb250aW51ZX1KNihYLCQpLnRoZW4oKF8pPT57aWYoWilyZXR1cm47WSgoSCk9Pih7Li4uSCxbJF06X30pKX0pfXJldHVybigpPT57Wj0hMH19LFtYLHFdKSxKfWZ1bmN0aW9uIFMxKFgsRyl7ZmV0Y2gocjAoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6WCxvbjpHfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBDOCgpe2xldCBYPXIwKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEc9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKFgsRykpcmV0dXJufX1jYXRjaHt9ZmV0Y2goWCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFo2KHt1ZGlkOlgsdGFyZ2V0czpHLHNlbGVjdGVkOkosb25TZWxlY3RUYXJnZXQ6WSxvblJlZnJlc2g6cX0pe2xldCBaPVY4KEcpLCQ9Wi5tYXAoKE4pPT5OLmJ1bmRsZUlkKS5maWx0ZXIoKE4pPT4hIU4pLFY9WTYoWCwkKSxbSyxfXT1UKCExKSxbSCx6XT1UKG51bGwpLEw9YihudWxsKSxCPWIobnVsbCk7UigoKT0+e2lmKCFLKXJldHVybjtsZXQgTj0oTyk9PntpZighQi5jdXJyZW50KXJldHVybjtpZighQi5jdXJyZW50LmNvbnRhaW5zKE8udGFyZ2V0KSlfKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTil9LFtLXSksUigoKT0+e2lmKEspcmV0dXJuO2lmKEwuY3VycmVudClTMShMLmN1cnJlbnQsITEpLEwuY3VycmVudD1udWxsO0M4KCl9LFtLXSksUigoKT0+e2xldCBOPSgpPT5DOCgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE4pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLE4pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixOKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixOKX19LFtdKTtsZXQgTT1KPyhKLnRpdGxlfHxKLnVybHx8Si5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIFEoImRpdiIse3JlZjpCLHN0eWxlOm0ucGlja2VyV3JhcCxjaGlsZHJlbjpbUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57XygoTik9PntpZighTilxKCk7cmV0dXJuIU59KX0sc3R5bGU6bS5waWNrZXJCdXR0b24sImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6SywiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6bS5waWNrZXJMYWJlbCxjaGlsZHJlbjpNfSksUSgic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksSyYmUSgidWwiLHtyb2xlOiJsaXN0Ym94IixzdHlsZTptLnBpY2tlckxpc3QsY2hpbGRyZW46Wi5tYXAoKE4pPT57bGV0IE89Ti5idW5kbGVJZD9WW04uYnVuZGxlSWRdOm51bGw7cmV0dXJuIFEoImxpIix7c3R5bGU6bS5waWNrZXJHcm91cCxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6bS5waWNrZXJHcm91cEhlYWRlcixjaGlsZHJlbjpbTz9RKCJpbWciLHtzcmM6TyxhbHQ6IiIsc3R5bGU6bS5waWNrZXJHcm91cEljb25JbWd9KTpRKCJzcGFuIix7c3R5bGU6bS5waWNrZXJHcm91cEljb25JbWcsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxRKCJzcGFuIix7c3R5bGU6bS5waWNrZXJHcm91cE5hbWUsY2hpbGRyZW46Ti5hcHBOYW1lfSldfSksUSgidWwiLHtyb2xlOiJncm91cCIsc3R5bGU6bS5waWNrZXJHcm91cExpc3QsY2hpbGRyZW46Ti50YXJnZXRzLm1hcCgoUCk9PntsZXQgQT1KPy5pZD09PVAuaWQsdj0hIVAuaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhQSx5PShQLnRpdGxlfHxQLnVybHx8UC5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKTtyZXR1cm4gUSgibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpBLCJhcmlhLWRpc2FibGVkIjp2LHRhYkluZGV4OnY/LTE6MCx0aXRsZTp2PyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYodilyZXR1cm47aWYoTC5jdXJyZW50JiZMLmN1cnJlbnQhPT1QLmlkKVMxKEwuY3VycmVudCwhMSk7TC5jdXJyZW50PVAuaWQseihQLmlkKSxTMShQLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoTC5jdXJyZW50PT09UC5pZClTMShQLmlkLCExKSxMLmN1cnJlbnQ9bnVsbDt6KCh1KT0+dT09PVAuaWQ/bnVsbDp1KX0sb25DbGljazooKT0+e2lmKHYpcmV0dXJuO1koUC5pZCksXyghMSl9LHN0eWxlOnsuLi5tLnBpY2tlckl0ZW0sLi4uQT9tLnBpY2tlckl0ZW1TZWxlY3RlZDpudWxsLC4uLkg9PT1QLmlkJiYhdj9tLnBpY2tlckl0ZW1Ib3ZlcmVkOm51bGwsLi4udj9tLnBpY2tlckl0ZW1EaXNhYmxlZDpudWxsfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOm0ucGlja2VySXRlbVRpdGxlLGNoaWxkcmVuOnl9KSxQLnVybCYmUC51cmwhPT0iYWJvdXQ6YmxhbmsiJiZRKCJzcGFuIix7c3R5bGU6bS5waWNrZXJJdGVtVXJsLGNoaWxkcmVuOlAudXJsfSldfSxQLmlkKX0pfSldfSxOLmtleSl9KX0pXX0pfWZ1bmN0aW9uIHE2KFgpe3RyeXtsZXQgRz1KU09OLnBhcnNlKFgpLEo9W107Zm9yKGxldFtZLHFdb2YgT2JqZWN0LmVudHJpZXMoRy5kZXZpY2VzPz97fSkpe2xldCBaPVkucmVwbGFjZSgvXmNvbVwuYXBwbGVcLkNvcmVTaW11bGF0b3JcLlNpbVJ1bnRpbWVcLi8sIiIpLnJlcGxhY2UoLy0vZywiLiIpO2ZvcihsZXQgJCBvZiBxKWlmKCQuaXNBdmFpbGFibGUpSi5wdXNoKHt1ZGlkOiQudWRpZCxuYW1lOiQubmFtZSxzdGF0ZTokLnN0YXRlLHJ1bnRpbWU6Wn0pfXJldHVybiBKfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiB5MShYKXtsZXQgRz1YLnRvTG93ZXJDYXNlKCk7aWYoRy5pbmNsdWRlcygiaXBob25lIikpcmV0dXJuIDA7aWYoRy5pbmNsdWRlcygiaXBhZCIpKXJldHVybiAxO2lmKEcuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIDI7aWYoRy5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuIDM7cmV0dXJuIDR9ZnVuY3Rpb24gdjEoWCl7bGV0IEc9WC50b0xvd2VyQ2FzZSgpO2lmKEcuc3RhcnRzV2l0aCgiaW9zIikpcmV0dXJuIDA7aWYoRy5zdGFydHNXaXRoKCJpcGFkb3MiKSlyZXR1cm4gMTtpZihHLnN0YXJ0c1dpdGgoIndhdGNob3MiKSlyZXR1cm4gMjtpZihHLnN0YXJ0c1dpdGgoInZpc2lvbm9zIil8fEcuc3RhcnRzV2l0aCgieHJvcyIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIFE2KHtkZXZpY2VzOlgsc2VsZWN0ZWRVZGlkOkcsbG9hZGluZzpKLGVycm9yOlksc3RvcHBpbmdVZGlkczpxLG9uUmVmcmVzaDpaLG9uU2VsZWN0OiQsb25TdG9wOlYsdHJpZ2dlcjpLfSl7bGV0W18sSF09VCghMSksej1iKG51bGwpO1IoKCk9PntpZighXylyZXR1cm47bGV0IE49KE8pPT57aWYoIXouY3VycmVudD8uY29udGFpbnMoTy50YXJnZXQpKUgoITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLE4pfSxbX10pO2xldCBMPW5ldyBNYXA7Zm9yKGxldCBOIG9mIFgpe2lmKE4udWRpZD09PUcpY29udGludWU7bGV0IE89TC5nZXQoTi5ydW50aW1lKTtpZighTylPPVtdLEwuc2V0KE4ucnVudGltZSxPKTtPLnB1c2goTil9Zm9yKGxldCBOIG9mIEwudmFsdWVzKCkpTi5zb3J0KChPLFApPT55MShPLm5hbWUpLXkxKFAubmFtZSl8fE8ubmFtZS5sb2NhbGVDb21wYXJlKFAubmFtZSkpO2xldCBCPVsuLi5MLmVudHJpZXMoKV0uc29ydCgoW05dLFtPXSk9PnYxKE4pLXYxKE8pfHxOLmxvY2FsZUNvbXBhcmUoTykpLE09WC5maW5kKChOKT0+Ti51ZGlkPT09Ryk/P251bGw7cmV0dXJuIFEoImRpdiIse3JlZjp6LHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUifSxjaGlsZHJlbjpbUSgiZGl2Iix7b25DbGljazooKT0+e2lmKCFfKVooKTtIKChOKT0+IU4pfSxjaGlsZHJlbjpLfSksXyYmUSgiZGl2Iix7c3R5bGU6QzYsY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnA4LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwfSxjaGlsZHJlbjoiU2ltdWxhdG9ycyJ9KSxRKCJidXR0b24iLHtvbkNsaWNrOihOKT0+e04uc3RvcFByb3BhZ2F0aW9uKCksWigpfSxkaXNhYmxlZDpKLHN0eWxlOmY4LGNoaWxkcmVuOko/Ii4uLiI6IlJlZnJlc2gifSldfSksWSYmUSgiZGl2Iix7c3R5bGU6ejksY2hpbGRyZW46WX0pLE0mJlEoYSx7Y2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnsuLi5LOSxjb2xvcjoiI2E1YjRmYyJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6VjkoTS5zdGF0ZT09PSJCb290ZWQiPyIjNGFkZTgwIjoiIzQ0NCIpfSksUSgic3BhbiIse3N0eWxlOntmbGV4OjF9LGNoaWxkcmVuOk0ubmFtZX0pXX0pLFEoImRpdiIse3N0eWxlOlI2fSldfSksWC5sZW5ndGg9PT0wJiYhSiYmIVkmJlEoImRpdiIse3N0eWxlOmQ4LGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW04sT10pPT5RKCJkaXYiLHtjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6dTgsY2hpbGRyZW46Tn0pLE8ubWFwKChQKT0+e2xldCBBPXEuaGFzKFAudWRpZCksdj1QLnN0YXRlPT09IkJvb3RlZCI7cmV0dXJuIFEoImRpdiIse3N0eWxlOks5LG9uTW91c2VFbnRlcjooeSk9PnkuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixvbk1vdXNlTGVhdmU6KHkpPT55LmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PnskKFApLEgoITEpfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlY5KHY/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MX0sY2hpbGRyZW46UC5uYW1lfSksdiYmUSgic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCFBKVYoUC51ZGlkKX0sc3R5bGU6e2ZvbnRTaXplOjEwLHBhZGRpbmc6IjFweCA2cHgiLGJvcmRlclJhZGl1czo0LGNvbG9yOkE/IiM4ODgiOiIjZjg3MTcxIixiYWNrZ3JvdW5kOkE/InRyYW5zcGFyZW50IjoicmdiYSgyNDgsMTEzLDExMywwLjEpIixjdXJzb3I6QT8iZGVmYXVsdCI6InBvaW50ZXIifSxjaGlsZHJlbjpBPyJTdG9wcGluZy4uLiI6IlN0b3AifSldfSxQLnVkaWQpfSldfSxOKSldfSldfSl9ZnVuY3Rpb24gVjkoWCl7cmV0dXJue3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6WCxmbGV4U2hyaW5rOjB9fXZhciAkNj1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxSOD0yNjIxNDQsXzY9NTI0Mjg4MDAwO2Z1bmN0aW9uIFY2KFgpe2lmKEw5KFgpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoJDYuaGFzKFgudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6NihYKXtsZXQgRz1uZXcgVWludDhBcnJheShYKSxKPSIiO2ZvcihsZXQgWT0wO1k8Ry5sZW5ndGg7WSsrKUorPVN0cmluZy5mcm9tQ2hhckNvZGUoR1tZXSk7cmV0dXJuIGJ0b2EoSil9ZnVuY3Rpb24gTDkoWCl7bGV0IEc9WC5uYW1lLEo9Ry5sYXN0SW5kZXhPZigiLiIpO2lmKEo+PTApcmV0dXJuIEcuc2xpY2UoSisxKS50b0xvd2VyQ2FzZSgpO2lmKFgudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1hc3luYyBmdW5jdGlvbiBLNihYLEcsSixZKXtpZihYLnNpemU+XzYpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IHE9Rz09PSJpcGEiPyJpcGEiOkw5KFgpLCQ9YC90bXAvJHtHPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtxfWA7dHJ5e2xldCBWPWF3YWl0IFguYXJyYXlCdWZmZXIoKSxLPXo2KFYpO2ZvcihsZXQgej0wO3o8Sy5sZW5ndGg7eis9Ujgpe2xldCBMPUsuc2xpY2Uoeix6K1I4KSxNPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtMfSB8IGJhc2U2NCAtZCAke3o9PT0wPyI+IjoiPj4ifSAkeyR9J2ApO2lmKE0uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKE0uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7TS5leGl0Q29kZX0pYCl9bGV0IF89Rz09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke1l9ICR7JH1gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtZfSAkeyR9YCxIPWF3YWl0IEooXyk7aWYoSC5leGl0Q29kZSE9PTApe2xldCB6PUc9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihILnN0ZGVycnx8YCR7en0gZmFpbGVkIChleGl0ICR7SC5leGl0Q29kZX0pYCl9fWZpbmFsbHl7SihgYmFzaCAtYyAncm0gLWYgJHskfSdgKS5jYXRjaCgoKT0+e30pfX1mdW5jdGlvbiBXNigpe2xldFtYLEddPVQoW10pLEo9aigocSxaKT0+e2xldCAkPWNyeXB0by5yYW5kb21VVUlEKCk7cmV0dXJuIEcoKFYpPT5bLi4uVix7aWQ6JCxuYW1lOnEsa2luZDpaLHN0YXR1czoidXBsb2FkaW5nIn1dKSwkfSxbXSksWT1qKChxLFopPT57aWYoRygoJCk9PiQubWFwKChWKT0+Vi5pZD09PXE/ey4uLlYsLi4uWn06VikpLFouc3RhdHVzPT09InN1Y2Nlc3MifHxaLnN0YXR1cz09PSJlcnJvciIpc2V0VGltZW91dCgoKT0+e0coKCQpPT4kLmZpbHRlcigoVik9PlYuaWQhPT1xKSl9LDMwMDApfSxbXSk7cmV0dXJue3RvYXN0czpYLGFkZDpKLHVwZGF0ZTpZfX1mdW5jdGlvbiBMNih7ZXhlYzpYLHVkaWQ6RyxlbmFibGVkOkosb25VcGxvYWRTdGFydDpZLG9uVXBsb2FkRW5kOnEsb25VbnN1cHBvcnRlZDpafSl7bGV0WyQsVl09VCghMSksSz1iKDApLF89aihhc3luYyhCKT0+e2lmKEIucHJldmVudERlZmF1bHQoKSxCLnN0b3BQcm9wYWdhdGlvbigpLEsuY3VycmVudD0wLFYoITEpLCFKfHwhRylyZXR1cm47bGV0IE09QXJyYXkuZnJvbShCLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoTS5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IE4gb2YgTSl7bGV0IE89VjYoTik7aWYoIU8pe1ooTik7Y29udGludWV9bGV0IFA9WShOLm5hbWUsTyk7SzYoTixPLFgsRykudGhlbigoKT0+cShQLCEwKSkuY2F0Y2goKEEpPT5xKFAsITEsQSBpbnN0YW5jZW9mIEVycm9yP0EubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtKLEcsWCxZLHEsWl0pLEg9aigoQik9PntpZihCLnByZXZlbnREZWZhdWx0KCksSilCLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0pdKSx6PWooKEIpPT57aWYoQi5wcmV2ZW50RGVmYXVsdCgpLCFKKXJldHVybjtpZihLLmN1cnJlbnQrKyxLLmN1cnJlbnQ9PT0xKVYoITApfSxbSl0pLEw9aigoQik9PntpZihCLnByZXZlbnREZWZhdWx0KCksSy5jdXJyZW50LS0sSy5jdXJyZW50PD0wKUsuY3VycmVudD0wLFYoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6JCxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkgsb25EcmFnRW50ZXI6eixvbkRyYWdMZWF2ZTpMLG9uRHJvcDpffX19ZnVuY3Rpb24gSTAoWCl7cmV0dXJuYCcke1gucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIGg4KFgsRyxKKXtsZXQgWT1hd2FpdCBYKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtHfSAke0kwKEopfSBhcHBgKTtpZihZLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WS5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgcT1ZLnN0ZG91dC50cmltKCk7aWYoIXEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBaPWF3YWl0IFgoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtJMChxKyIvSW5mby5wbGlzdCIpfWApLCQ9e307aWYoWi5leGl0Q29kZT09PTApdHJ5eyQ9SlNPTi5wYXJzZShaLnN0ZG91dCl9Y2F0Y2h7fWxldCBWLF89KCQ/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/PyQ/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/JD8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoXyYmXy5sZW5ndGg+MClWPV9bXy5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgJD8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKVY9JC5DRkJ1bmRsZUljb25GaWxlO2xldCBIPW51bGw7aWYoVil7bGV0IHo9W2Ake1Z9QDN4LnBuZ2AsYCR7Vn1AMngucG5nYCxgJHtWfS5wbmdgLGAke1Z9NjB4NjBAM3gucG5nYCxgJHtWfTYweDYwQDJ4LnBuZ2BdLEI9KGF3YWl0IFgoYGJhc2ggLWMgJHtJMCh6Lm1hcCgoTSk9PmBbIC1mICR7STAocSsiLyIrTSl9IF0gJiYgZWNobyAke0kwKHErIi8iK00pfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEIpe2xldCBNPWF3YWl0IFgoYGJhc2U2NCAtaSAke0kwKEIpfWApO2lmKE0uZXhpdENvZGU9PT0wKUg9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke00uc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpxLGRpc3BsYXlOYW1lOiQuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/JC5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOiQuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjokLkNGQnVuZGxlVmVyc2lvbixtaW5PUzokLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTokLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpIfX1mdW5jdGlvbiBINih7dWRpZDpYLGN1cnJlbnRBcHA6R30pe2xldFtKLFldPVQobnVsbCk7aWYoUigoKT0+e2lmKCFHKXtZKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWSh7YnVuZGxlSWQ6Ry5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkcuaXNSZWFjdE5hdGl2ZSxwaWQ6Ry5waWQsbG9hZGluZzohMH0pLGg4KCQwLFgsRy5idW5kbGVJZCkudGhlbigoWik9PntpZihxKXJldHVybjtZKHtidW5kbGVJZDpHLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Ry5pc1JlYWN0TmF0aXZlLHBpZDpHLnBpZCxsb2FkaW5nOiExLC4uLlp9KX0pLCgpPT57cT0hMH19LFtYLEc/LmJ1bmRsZUlkLEc/LnBpZCxHPy5pc1JlYWN0TmF0aXZlXSksIUopcmV0dXJuIFEoImRpdiIse3N0eWxlOlMuZW1wdHksY2hpbGRyZW46IldhaXRpbmcgZm9yIGFuIGFwcCB0byBjb21lIHRvIHRoZSBmb3JlZ3JvdW5k4oCmIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTpTLnNlY3Rpb24sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOlMuYXBwSGVhZGVyLGNoaWxkcmVuOltKLmljb25EYXRhVXJsP1EoImltZyIse3NyYzpKLmljb25EYXRhVXJsLHN0eWxlOlMuYXBwSWNvbixhbHQ6IiJ9KTpRKCJkaXYiLHtzdHlsZTp7Li4uUy5hcHBJY29uLGJhY2tncm91bmQ6IiMyYTJhMmMifX0pLFEoImRpdiIse3N0eWxlOnttaW5XaWR0aDowLGZsZXg6MX0sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOlMuYXBwTmFtZSxjaGlsZHJlbjpbSi5kaXNwbGF5TmFtZT8/Si5idW5kbGVJZCxKLmxvYWRpbmcmJlEoInNwYW4iLHtzdHlsZTpTLnNwaW5uZXIsY2hpbGRyZW46IiDigKYifSldfSksUSgiZGl2Iix7c3R5bGU6Uy5hcHBCdW5kbGUsdGl0bGU6Si5idW5kbGVJZCxjaGlsZHJlbjpKLmJ1bmRsZUlkfSldfSldfSksSi5lcnJvciYmUSgiZGl2Iix7c3R5bGU6Uy5lcnJvcixjaGlsZHJlbjpKLmVycm9yfSksUSgiZGwiLHtzdHlsZTpTLmRsLGNoaWxkcmVuOltRKG8wLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Si5zaG9ydFZlcnNpb24/YCR7Si5zaG9ydFZlcnNpb259ICgke0ouYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Si5sb2FkaW5nPyLigKYiOiLigJQifSksUShvMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOkoubWluT1M/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksUShvMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOkouZXhlY3V0YWJsZT8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxRKG8wLHtsYWJlbDoiUElEIix2YWx1ZTpKLnBpZCE9bnVsbD9TdHJpbmcoSi5waWQpOiLigJQifSksSi5pc1JlYWN0TmF0aXZlJiZRKG8wLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFEobzAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Si5hcHBQYXRoPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpKLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57JDAoYG9wZW4gLVIgJHtJMChKLmFwcFBhdGgpfWApfSxpY29uOlEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLFEoInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIG8wKHtsYWJlbDpYLHZhbHVlOkcsbW9ubzpKLGFjdGlvbjpZfSl7bGV0W3EsWl09VCghMSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOlMucm93LG9uTW91c2VFbnRlcjooKT0+WighMCksb25Nb3VzZUxlYXZlOigpPT5aKCExKSxjaGlsZHJlbjpbUSgiZHQiLHtzdHlsZTpTLmR0LGNoaWxkcmVuOlh9KSxRKCJkZCIse3N0eWxlOnsuLi5TLmRkLGZvbnRGYW1pbHk6Sj8idWktbW9ub3NwYWNlLCBtb25vc3BhY2UiOnZvaWQgMCxmb250U2l6ZTpKPzExOjEyLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LHRpdGxlOkcsY2hpbGRyZW46W0csWSYmUSgiZGl2Iix7c3R5bGU6ey4uLlMucm93QWN0aW9uV3JhcCxvcGFjaXR5OnE/MTowLHRyYW5zZm9ybTpxPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWCg0cHgpIixwb2ludGVyRXZlbnRzOnE/ImF1dG8iOiJub25lIn0sY2hpbGRyZW46USgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlkub25DbGljayx0aXRsZTpZLnRpdGxlLCJhcmlhLWxhYmVsIjpZLnRpdGxlLHN0eWxlOlMucm93QWN0aW9uLGNoaWxkcmVuOlkuaWNvbn0pfSldfSldfSl9dmFyIEI2PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIEY2KHt1ZGlkOlgsYnVuZGxlSWQ6R30pe2xldFtKLFldPVQoe30pLFtxLFpdPVQobnVsbCksWyQsVl09VChudWxsKSxbSyxfXT1UKCExKTtSKCgpPT57WSh7fSksVihudWxsKX0sW0ddKTtsZXQgSD1qKGFzeW5jKEwsQik9PntpZighRylyZXR1cm47bGV0IE09YCR7TH06JHtCfWA7WihNKSxWKG51bGwpO3RyeXtsZXQgTj1hd2FpdCAkMChgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtYfSAke0J9ICR7TH0gJHtJMChHKX1gKTtpZihOLmV4aXRDb2RlIT09MCl7VihOLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKTtyZXR1cm59WSgoTyk9Pih7Li4uTyxbTF06Qj09PSJyZXNldCI/dm9pZCAwOkJ9KSl9ZmluYWxseXtaKG51bGwpfX0sW1gsR10pLHo9aihhc3luYygpPT57aWYoIUcpcmV0dXJuO1ooIl9fYWxsX18iKSxWKG51bGwpO3RyeXtsZXQgTD1hd2FpdCAkMChgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtYfSByZXNldCBhbGwgJHtJMChHKX1gKTtpZihMLmV4aXRDb2RlIT09MCl7VihMLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtMLmV4aXRDb2RlfSlgKTtyZXR1cm59WSh7fSl9ZmluYWxseXtaKG51bGwpfX0sW1gsR10pO2lmKCFHKXJldHVybiBRKCJkaXYiLHtzdHlsZTpTLmVtcHR5LGNoaWxkcmVuOiJQZXJtaXNzaW9ucyBhcHBlYXIgb25jZSBhbiBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQuIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTp7Li4uUy5zZWN0aW9uLHBhZGRpbmc6IjhweCAxMnB4In0sY2hpbGRyZW46W1EoImJ1dHRvbiIse29uQ2xpY2s6KCk9Pl8oKEwpPT4hTCksc3R5bGU6Uy5wZXJtc1RvZ2dsZSwiYXJpYS1leHBhbmRlZCI6SyxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi5TLnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e3RyYW5zZm9ybTpLPyJyb3RhdGUoOTBkZWcpIjoicm90YXRlKDBkZWcpIix0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xNXMiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjkgMTggMTUgMTIgOSA2In0pfSldfSksSyYmJCYmUSgiZGl2Iix7c3R5bGU6ey4uLlMuZXJyb3IsbWFyZ2luVG9wOjh9LGNoaWxkcmVuOiR9KSxLJiZRKCJkaXYiLHtzdHlsZTpTLnBlcm1zU2Nyb2xsV3JhcCxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6Uy5wZXJtc1Njcm9sbCxjaGlsZHJlbjpCNi5tYXAoKHtrZXk6TCxsYWJlbDpCfSk9PntsZXQgTT1KW0xdO3JldHVybiBRKCJkaXYiLHtzdHlsZTpTLnBlcm1Sb3csY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTpTLnBlcm1MYWJlbCxjaGlsZHJlbjpCfSksUSgiZGl2Iix7c3R5bGU6Uy5wZXJtU2VnLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6QixjaGlsZHJlbjpbUSgkOSx7YWN0aXZlOk09PT0iZ3JhbnQiLHBlbmRpbmc6cT09PWAke0x9OmdyYW50YCxvbkNsaWNrOigpPT5IKEwsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjUgMTIgMTAgMTcgMTkgNyJ9KX0pfSksUSgkOSx7YWN0aXZlOk09PT0icmV2b2tlIixwZW5kaW5nOnE9PT1gJHtMfTpyZXZva2VgLG9uQ2xpY2s6KCk9PkgoTCwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pXX0pfSksUSgkOSx7YWN0aXZlOiExLHBlbmRpbmc6cT09PWAke0x9OnJlc2V0YCxvbkNsaWNrOigpPT5IKEwsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46UShqOCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sTCl9KX0pLFEoImRpdiIse3N0eWxlOlMucGVybXNGYWRlVG9wfSksUSgiZGl2Iix7c3R5bGU6Uy5wZXJtc0ZhZGVCb3R0b219KV19KSxLJiZRKCJkaXYiLHtzdHlsZTpTLnBlcm1zRm9vdGVyLGNoaWxkcmVuOlEoImJ1dHRvbiIse29uQ2xpY2s6eixkaXNhYmxlZDpxPT09Il9fYWxsX18iLHN0eWxlOlMucmVzZXRBbGxCdG4sdGl0bGU6InhjcnVuIHNpbWN0bCBwcml2YWN5IHJlc2V0IGFsbCIsY2hpbGRyZW46cT09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gRDYoe2RldmljZXM6WCxsb2FkaW5nOkcsZXJyb3I6SixvblJlZnJlc2g6WX0pe2xldFtxLFpdPVQobnVsbCksWyQsVl09VChudWxsKSxLPWooYXN5bmMoeik9PntpZihxKXJldHVybjtaKHoudWRpZCksVihudWxsKTt0cnl7aWYoei5zdGF0ZSE9PSJCb290ZWQiKXtsZXQgTj1hd2FpdCAkMChgeGNydW4gc2ltY3RsIGJvb3QgJHt6LnVkaWR9YCk7aWYoTi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoTi5zdGRlcnJ8fCJGYWlsZWQgdG8gYm9vdCBzaW11bGF0b3IiKX1sZXQgTD1hd2FpdCAkMChgYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2ggJHt6LnVkaWR9YCk7aWYoTC5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoTC5zdGRlcnJ8fCJGYWlsZWQgdG8gc3RhcnQgc2VydmUtc2ltIik7bGV0IEI9RGF0ZS5ub3coKSsxNTAwMCxNPWAke3IwKCJhcGkiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHoudWRpZCl9YDt3aGlsZShEYXRlLm5vdygpPEIpe3RyeXtsZXQgTj1hd2FpdCBmZXRjaChNLHtjYWNoZToibm8tc3RvcmUifSk7aWYoTi5vayYmYXdhaXQgTi5qc29uKCkpe2xldCBPPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO08uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIix6LnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oTy50b1N0cmluZygpKTtyZXR1cm59fWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoTik9PnNldFRpbWVvdXQoTiw0MDApKX10aHJvdyBFcnJvcigic2VydmUtc2ltIHN0YXJ0ZWQgYnV0IG5vIHN0cmVhbSBzdGF0ZSBhcHBlYXJlZCIpfWNhdGNoKEwpe1YoTCBpbnN0YW5jZW9mIEVycm9yP0wubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbSIpLFoobnVsbCl9fSxbcV0pLF89bmV3IE1hcDtmb3IobGV0IHogb2YgWCl7bGV0IEw9Xy5nZXQoei5ydW50aW1lKTtpZighTClMPVtdLF8uc2V0KHoucnVudGltZSxMKTtMLnB1c2goeil9Zm9yKGxldCB6IG9mIF8udmFsdWVzKCkpei5zb3J0KChMLEIpPT57bGV0IE09TC5zdGF0ZT09PSJCb290ZWQiPzA6MSxOPUIuc3RhdGU9PT0iQm9vdGVkIj8wOjE7aWYoTSE9PU4pcmV0dXJuIE0tTjtyZXR1cm4geTEoTC5uYW1lKS15MShCLm5hbWUpfHxMLm5hbWUubG9jYWxlQ29tcGFyZShCLm5hbWUpfSk7bGV0IEg9Wy4uLl8uZW50cmllcygpXS5zb3J0KChbel0sW0xdKT0+djEoeiktdjEoTCl8fHoubG9jYWxlQ29tcGFyZShMKSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOl8wLnBhZ2UsY2hpbGRyZW46USgiZGl2Iix7c3R5bGU6XzAuZW1wdHksY2hpbGRyZW46W1EoImgxIix7c3R5bGU6XzAuZW1wdHlUaXRsZSxjaGlsZHJlbjoiTm8gc2VydmUtc2ltIHN0cmVhbSBydW5uaW5nIn0pLFEoInAiLHtzdHlsZTpfMC5lbXB0eUhpbnQsY2hpbGRyZW46WyJQaWNrIGEgc2ltdWxhdG9yIHRvIGJvb3QsIG9yIHN0YXJ0IG9uZSB5b3Vyc2VsZiB3aXRoIiwiICIsUSgiY29kZSIse3N0eWxlOl8wLmNvZGUsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KSxRKCJkaXYiLHtzdHlsZTpUNixjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6cDgsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9LGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFEoImJ1dHRvbiIse29uQ2xpY2s6WSxkaXNhYmxlZDpHLHN0eWxlOmY4LGNoaWxkcmVuOkc/Ii4uLiI6IlJlZnJlc2gifSldfSksSiYmUSgiZGl2Iix7c3R5bGU6ejksY2hpbGRyZW46Sn0pLCQmJlEoImRpdiIse3N0eWxlOno5LGNoaWxkcmVuOiR9KSwhRyYmIUomJlgubGVuZ3RoPT09MCYmUSgiZGl2Iix7c3R5bGU6ZDgsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLEgubWFwKChbeixMXSk9PlEoImRpdiIse2NoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTp1OCxjaGlsZHJlbjp6fSksTC5tYXAoKEIpPT57bGV0IE09cT09PUIudWRpZCxOPXEhPT1udWxsJiYhTSxPPUIuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLks5LGN1cnNvcjpOPyJkZWZhdWx0IjoicG9pbnRlciIsb3BhY2l0eTpOPzAuNToxfSxvbk1vdXNlRW50ZXI6KFApPT57aWYoIU4pUC5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkifSxvbk1vdXNlTGVhdmU6KFApPT5QLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PntpZighTilLKEIpfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlY5KE8/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MSx0ZXh0QWxpZ246ImxlZnQifSxjaGlsZHJlbjpCLm5hbWV9KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOk0/IiNhNWI0ZmMiOiIjODg4In0sY2hpbGRyZW46TT9PPyJTdGFydGluZy4uLiI6IkJvb3RpbmcuLi4iOk8/IlN0YXJ0IHN0cmVhbSI6IkJvb3QgJiBzdHJlYW0ifSldfSxCLnVkaWQpfSldfSx6KSldfSldfSl9KX1mdW5jdGlvbiAkOSh7YWN0aXZlOlgscGVuZGluZzpHLG9uQ2xpY2s6Six2YXJpYW50OlksdGl0bGU6cSxjaGlsZHJlbjpafSl7bGV0ICQ9WT09PSJncmFudCI/IiM0YWRlODAiOlk9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBRKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6Ryx0aXRsZTpxLCJhcmlhLWxhYmVsIjpxLHN0eWxlOnsuLi5TLnBlcm1CdG4sYmFja2dyb3VuZDpYP2AkeyR9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6WD8kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Okc/MC41OjF9LGNoaWxkcmVuOlp9KX1mdW5jdGlvbiBtOChYLEcpe2lmKFg9PT1HKXJldHVybiEwO2lmKFguaWQhPT1HLmlkfHxYLnBhdGghPT1HLnBhdGh8fFgubGFiZWwhPT1HLmxhYmVsfHxYLnZhbHVlIT09Ry52YWx1ZXx8WC5yb2xlIT09Ry5yb2xlfHxYLnR5cGUhPT1HLnR5cGV8fFguZW5hYmxlZCE9PUcuZW5hYmxlZClyZXR1cm4hMTtsZXQgSj1YLmZyYW1lLFk9Ry5mcmFtZTtyZXR1cm4gSj09PVl8fEoueD09PVkueCYmSi55PT09WS55JiZKLndpZHRoPT09WS53aWR0aCYmSi5oZWlnaHQ9PT1ZLmhlaWdodH12YXIgTjY9WTkoZnVuY3Rpb24oe2VsZW1lbnQ6RyxpbmRleDpKLHNjcmVlbjpZLGhpZ2hsaWdodGVkOnEsc2VsZWN0ZWQ6WixvbkhpZ2hsaWdodDokLG9uU2VsZWN0OlZ9KXtsZXQgSz1oMShHKSxfPWc4KEcsSiksSD1NNihHLmZyYW1lLFkpO2lmKCFIKXJldHVybiBudWxsO2xldCB6PUE2KF8pO3JldHVybiBRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6SywiZGF0YS1heC1pZCI6Xy5pZCwiZGF0YS1heC1wYXRoIjpfLnBhdGgsImRhdGEtYXgtbGFiZWwiOl8ubGFiZWwsImRhdGEtYXgtdmFsdWUiOl8udmFsdWUsImRhdGEtYXgtcm9sZSI6Xy5yb2xlLCJkYXRhLWF4LXR5cGUiOl8udHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoXy5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6eDgoXy5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhaKSwiYXJpYS1sYWJlbCI6Ry5sYWJlbHx8eix0aXRsZTp6LG9uQ2xpY2s6KCk9PlYoSyksb25Nb3VzZUVudGVyOigpPT4kKEspLG9uTW91c2VMZWF2ZTooKT0+JChudWxsKSxzdHlsZTp7Li4uVjAudGFyZ2V0LGxlZnQ6YCR7SC54L1kud2lkdGgqMTAwfSVgLHRvcDpgJHtILnkvWS5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke0gud2lkdGgvWS53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke0guaGVpZ2h0L1kuaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpaPyIjNjBhNWZhIjpxPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpaPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOnE/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LChYLEcpPT5YLmluZGV4PT09Ry5pbmRleCYmWC5oaWdobGlnaHRlZD09PUcuaGlnaGxpZ2h0ZWQmJlguc2VsZWN0ZWQ9PT1HLnNlbGVjdGVkJiZYLm9uSGlnaGxpZ2h0PT09Ry5vbkhpZ2hsaWdodCYmWC5vblNlbGVjdD09PUcub25TZWxlY3QmJlguc2NyZWVuLndpZHRoPT09Ry5zY3JlZW4ud2lkdGgmJlguc2NyZWVuLmhlaWdodD09PUcuc2NyZWVuLmhlaWdodCYmbTgoWC5lbGVtZW50LEcuZWxlbWVudCkpO2Z1bmN0aW9uIE82KCl7bGV0e3NuYXBzaG90Olh9PVc5KCkse2hpZ2hsaWdodGVkS2V5Okcsc2VsZWN0ZWRLZXk6SixzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5OnF9PXY4KCk7aWYoIVg/LnNjcmVlbi53aWR0aHx8IVg/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIFEoImRpdiIse3N0eWxlOlYwLnRhcmdldHMsY2hpbGRyZW46WC5lbGVtZW50cy5tYXAoKFosJCk9PntsZXQgVj1oMShaKTtyZXR1cm4gUShONix7ZWxlbWVudDpaLGluZGV4OiQsc2NyZWVuOlguc2NyZWVuLGhpZ2hsaWdodGVkOlY9PT1HLHNlbGVjdGVkOlY9PT1KLG9uSGlnaGxpZ2h0Olksb25TZWxlY3Q6cX0sVil9KX0pfXZhciBVNj1ZOShmdW5jdGlvbih7ZWxlbWVudDpHLGluZGV4OkosYWN0aXZlOlksb25IaWdobGlnaHQ6cX0pe2xldCBaPWgxKEcpLCQ9ZzgoRyxKKSxWPWAke01hdGgucm91bmQoRy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChHLmZyYW1lLmhlaWdodCl9YCxLPVskLmxhYmVsLCQucm9sZXx8JC50eXBlfHwiZWxlbWVudCIsVl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gUSgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpaLHRpdGxlOkssb25Nb3VzZUVudGVyOigpPT5xKFopLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxvbkZvY3VzOigpPT5xKFopLG9uQmx1cjooKT0+cShudWxsKSxzdHlsZTp7Li4uVjAubGlzdEl0ZW0sLi4uWT9WMC5saXN0SXRlbUFjdGl2ZTp7fX0sY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTpWMC5pdGVtVGV4dCxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlYwLml0ZW1MYWJlbCxjaGlsZHJlbjpHLmxhYmVsfHxHLnJvbGV8fCJVbmxhYmVsZWQifSksUSgic3BhbiIse3N0eWxlOlYwLml0ZW1NZXRhLGNoaWxkcmVuOkcucm9sZXx8Ry50eXBlfHwiZWxlbWVudCJ9KV19KSxRKCJjb2RlIix7c3R5bGU6VjAuaXRlbVNpemUsY2hpbGRyZW46Vn0pXX0pfSwoWCxHKT0+WC5pbmRleD09PUcuaW5kZXgmJlguYWN0aXZlPT09Ry5hY3RpdmUmJlgub25IaWdobGlnaHQ9PT1HLm9uSGlnaGxpZ2h0JiZtOChYLmVsZW1lbnQsRy5lbGVtZW50KSk7ZnVuY3Rpb24gUDYoe292ZXJsYXlFbmFibGVkOlgsb25Ub2dnbGVPdmVybGF5Okd9KXtsZXR7c25hcHNob3Q6Sn09VzkoKSx7aGlnaGxpZ2h0ZWRLZXk6WSxzZXRIaWdobGlnaHRlZEtleTpxfT12OCgpLFo9Sj8uZWxlbWVudHM/P1tdLCQ9YjgoSiksVj1KPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLlMuc2VjdGlvbixwYWRkaW5nOiI4cHggMTJweCJ9LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTpWMC5wYW5lbEhlYWRlcixjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi5TLnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IkFYIFRyZWUifSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsImFyaWEtcHJlc3NlZCI6WCxzdHlsZTpWMC5vdmVybGF5VG9nZ2xlLGNoaWxkcmVuOlg/Ik92ZXJsYXkgb24iOiJFbmFibGUgb3ZlcmxheSJ9KV19KSwhWD9udWxsOiQ/USgiZGl2Iix7c3R5bGU6ey4uLlMuZW1wdHkscGFkZGluZzoxMn0sY2hpbGRyZW46WyJBWCB1bmF2YWlsYWJsZToiLCIgIixRKCJhIix7aHJlZjokOCxzdHlsZTpWMC5lbXB0eUxpbmssY2hpbGRyZW46Imluc3RhbGwgQVhlIn0pXX0pOloubGVuZ3RoPT09MD9RKCJkaXYiLHtzdHlsZTp7Li4uUy5lbXB0eSxwYWRkaW5nOjEyfSxjaGlsZHJlbjpWPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlEoImRpdiIse3N0eWxlOlYwLmxpc3Qscm9sZToibGlzdCIsY2hpbGRyZW46Wi5tYXAoKEssXyk9PntsZXQgSD1oMShLKTtyZXR1cm4gUShVNix7ZWxlbWVudDpLLGluZGV4Ol8sYWN0aXZlOkg9PT1ZLG9uSGlnaGxpZ2h0OnF9LEgpfSl9KV19KX1mdW5jdGlvbiBnOChYLEcpe2xldCBKPVgubGFiZWx8fFgucm9sZXx8YGVsZW1lbnQgJHtHKzF9YCxZPVgucm9sZXx8WC50eXBlO3JldHVybntpZDpYLmlkLHBhdGg6WC5wYXRoLGxhYmVsOkosdmFsdWU6WC52YWx1ZSxyb2xlOlksdHlwZTpYLnR5cGUsZW5hYmxlZDpYLmVuYWJsZWQsZnJhbWU6WC5mcmFtZX19ZnVuY3Rpb24gTTYoWCxHKXtsZXQgSj1NYXRoLm1heCgwLFgueCksWT1NYXRoLm1heCgwLFgueSkscT1NYXRoLm1pbihHLndpZHRoLFgueCtYLndpZHRoKSxaPU1hdGgubWluKEcuaGVpZ2h0LFgueStYLmhlaWdodCksJD1NYXRoLm1heCgwLHEtSiksVj1NYXRoLm1heCgwLFotWSk7cmV0dXJuICQ+MCYmVj4wP3t4OkoseTpZLHdpZHRoOiQsaGVpZ2h0OlZ9Om51bGx9ZnVuY3Rpb24gaDEoWCl7cmV0dXJuIFguaWR9ZnVuY3Rpb24gQTYoWCl7cmV0dXJuW2BBWCBsYWJlbDogJHtYLmxhYmVsfHwiVW5sYWJlbGVkIn1gLFgucm9sZT9gcm9sZTogJHtYLnJvbGV9YDoiIixYLnR5cGU/YHR5cGU6ICR7WC50eXBlfWA6IiIsWC52YWx1ZT9gdmFsdWU6ICR7WC52YWx1ZX1gOiIiLFguaWQ/YGlkOiAke1guaWR9YDoiIixgcGF0aDogJHtYLnBhdGh9YCxgZnJhbWU6ICR7eDgoWC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24geDgoWCl7cmV0dXJuYCR7WC54fSwke1gueX0gJHtYLndpZHRofXgke1guaGVpZ2h0fWB9ZnVuY3Rpb24gdzYoe292ZXJsYXlFbmFibGVkOlgsc3RyZWFtaW5nOkcsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOll9PVc5KCksW3EsWl09VCghMSk7cmV0dXJuIFEoUTAuQnV0dG9uLHsiYXJpYS1sYWJlbCI6WD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6WCx0aXRsZTpZLG9uQ2xpY2s6Sixvbk1vdXNlRW50ZXI6KCk9PlooITApLG9uTW91c2VMZWF2ZTooKT0+WighMSksc3R5bGU6WCYmRz97Li4uVjAudG9vbGJhckJ1dHRvbkFjdGl2ZSwuLi5xP1YwLnRvb2xiYXJCdXR0b25BY3RpdmVIb3Zlcjp7fX06dm9pZCAwLGNoaWxkcmVuOlEoInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTMgOFY1YTIgMiAwIDAgMSAyLTJoMyJ9KSxRKCJwYXRoIix7ZDoiTTE2IDNoM2EyIDIgMCAwIDEgMiAydjMifSksUSgicGF0aCIse2Q6Ik0yMSAxNnYzYTIgMiAwIDAgMS0yIDJoLTMifSksUSgicGF0aCIse2Q6Ik04IDIxSDVhMiAyIDAgMCAxLTItMnYtMyJ9KSxRKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMy41In0pXX0pfSl9ZnVuY3Rpb24gSTYoe29wZW46WCxvbkNsb3NlOkcsdWRpZDpKLGN1cnJlbnRBcHA6WSxheE92ZXJsYXlFbmFibGVkOnEsb25Ub2dnbGVBeE92ZXJsYXk6Wn0pe3JldHVybiBRKCJhc2lkZSIse3N0eWxlOnsuLi5TLnBhbmVsLHRyYW5zZm9ybTpYPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6WD8xOjAscG9pbnRlckV2ZW50czpYPyJhdXRvIjoibm9uZSJ9LCJhcmlhLWhpZGRlbiI6IVgsY2hpbGRyZW46W1EoImhlYWRlciIse3N0eWxlOlMuaGVhZGVyLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6Uy5oZWFkZXJUaXRsZSxjaGlsZHJlbjoiVG9vbHMifSksUSgiYnV0dG9uIix7b25DbGljazpHLHN0eWxlOlMuY2xvc2VCdG4sImFyaWEtbGFiZWwiOiJDbG9zZSBwYW5lbCIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE2Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSldfSksWCYmUSgiZGl2Iix7c3R5bGU6Uy5ib2R5LGNoaWxkcmVuOltRKFA2LHtvdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlT3ZlcmxheTpafSksUShINix7dWRpZDpKLGN1cnJlbnRBcHA6WX0pLFEoRjYse3VkaWQ6SixidW5kbGVJZDpZPy5idW5kbGVJZD8/bnVsbH0pXX0pXX0pfWZ1bmN0aW9uIGs2KHtvcGVuOlgsb25DbG9zZTpHLHVkaWQ6Six0YXJnZXRzOlksc2VsZWN0ZWRUYXJnZXRJZDpxLG9uU2VsZWN0VGFyZ2V0OlosbG9hZGluZzokLGVycm9yOlYsb25SZWZyZXNoOkt9KXtsZXQgXz1xP1kuZmluZCgoSCk9PkguaWQ9PT1xKT8/bnVsbDpudWxsO3JldHVybiBRKCJhc2lkZSIse3N0eWxlOnsuLi5tLnBhbmVsLHRyYW5zZm9ybTpYPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6WD8xOjAscG9pbnRlckV2ZW50czpYPyJhdXRvIjoibm9uZSJ9LCJhcmlhLWhpZGRlbiI6IVgsY2hpbGRyZW46W1EoImhlYWRlciIse3N0eWxlOm0uaGVhZGVyLGNoaWxkcmVuOltZLmxlbmd0aD4wP1EoWjYse3VkaWQ6Six0YXJnZXRzOlksc2VsZWN0ZWQ6XyxvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpLfSk6USgic3BhbiIse3N0eWxlOm0uZW1wdHlUYXJnZXQsY2hpbGRyZW46JD8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxRKCJidXR0b24iLHtvbkNsaWNrOkcsc3R5bGU6bS5pY29uQnV0dG9uLCJhcmlhLWxhYmVsIjoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGNoaWxkcmVuOlEoInN2ZyIse3dpZHRoOiIxNSIsaGVpZ2h0OiIxNSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxRKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pXX0pLFEoImRpdiIse3N0eWxlOm0uZnJhbWVXcmFwLGNoaWxkcmVuOlY/USgiZGl2Iix7c3R5bGU6bS5tZXNzYWdlLGNoaWxkcmVuOlZ9KTpfJiZYP1EoImlmcmFtZSIse3NyYzpfLmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7Xy50aXRsZXx8Xy51cmx8fF8uaWR9YCxzdHlsZTptLmlmcmFtZSxvbkxvYWQ6KEgpPT5HNihILmN1cnJlbnRUYXJnZXQpfSxfLmlkKTpRKCJkaXYiLHtzdHlsZTptLm1lc3NhZ2UsY2hpbGRyZW46Xz8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX12YXIgVDY9e3dpZHRoOiIxMDAlIixtYXhXaWR0aDozNjAsbWFyZ2luVG9wOjgsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6NCxmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsZm9udFNpemU6MTMsY29sb3I6IiNlZWUiLHRleHRBbGlnbjoibGVmdCIsbWF4SGVpZ2h0OiI3MHZoIixvdmVyZmxvd1k6ImF1dG8iLG1pbkhlaWdodDowfTtmdW5jdGlvbiBFNigpe2xldCBYPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18sW0csSl09VCghMSksW1kscV09VChbXSksW1osJF09VCghMSksW1YsS109VChudWxsKSxbXyxIXT1UKG5ldyBTZXQpLFt6LExdPVQoITEpLFtCLE1dPVQoITEpLFtOLE9dPVQoITEpLFtQLEFdPVQobnVsbCksdj1qKGFzeW5jKCk9PnskKCEwKSxLKG51bGwpO3RyeXtsZXQgRD1hd2FpdCAkMCgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihELmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihELnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO3EocTYoRC5zdGRvdXQpKX1jYXRjaChEKXtLKEQgaW5zdGFuY2VvZiBFcnJvcj9ELm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5eyQoITEpfX0sW10pO2lmKFIoKCk9Pnt2KCl9LFt2XSksUigoKT0+e2lmKCFYPy5sb2dzRW5kcG9pbnQpcmV0dXJuO2xldCBEPW5ldyBFdmVudFNvdXJjZShYLmxvZ3NFbmRwb2ludCksaz1uZXcgTWFwLEU9WyIjOGJlOWZkIiwiIzUwZmE3YiIsIiNmZmI4NmMiLCIjZmY3OWM2IiwiI2JkOTNmOSIsIiNmMWZhOGMiLCIjNjI3MmE0IiwiI2ZmNTU1NSIsIiM2OWZmOTQiLCIjZDZhY2ZmIiwiI2ZmZmZhNSIsIiNhNGZmZmYiLCIjZmY2ZTZlIiwiI2NhYTlmYSIsIiM1YWY3OGUiXTtmdW5jdGlvbiBoKEQwKXtsZXQgSjA9ay5nZXQoRDApO2lmKCFKMCl7bGV0IHEwPTA7Zm9yKGxldCBIMD0wO0gwPEQwLmxlbmd0aDtIMCsrKXEwPShxMDw8NSktcTArRDAuY2hhckNvZGVBdChIMCl8MDtKMD1FW01hdGguYWJzKHEwKSVFLmxlbmd0aF0say5zZXQoRDAsSjApfXJldHVybiBKMH1sZXQgaT0iIixkPSExO3JldHVybiBELm9ubWVzc2FnZT0oRDApPT57dHJ5e2xldCBKMD1KU09OLnBhcnNlKEQwLmRhdGEpLHEwPUowLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P0owLnNlbmRlckltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/IiIsSDA9SjAuc3Vic3lzdGVtPz8iIixQMD1KMC5jYXRlZ29yeT8/IiIsZDA9SjAuZXZlbnRNZXNzYWdlPz8iIjtpZighZDApcmV0dXJuO2lmKHEwIT09aSl7aWYoZCljb25zb2xlLmdyb3VwRW5kKCk7bGV0IHUwPWgocTApO2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYCVjJHtxMH0ke0gwP2AgJWMke0gwfSR7UDA/IjoiK1AwOiIifWA6IiJ9YCxgY29sb3I6JHt1MH07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uSDA/WyJjb2xvcjojODg4O2ZvbnQtd2VpZ2h0Om5vcm1hbCJdOltdKSxkPSEwLGk9cTB9bGV0IG0wPShKMC5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksTjA9SDAmJnEwPT09aT9gJWMke1AwfHxIMH0lYyBgOiIiLEIwPU4wP1siY29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpYyIsImNvbG9yOmluaGVyaXQiXTpbXTtpZihtMD09PSJmYXVsdCJ8fG0wPT09ImVycm9yIiljb25zb2xlLmxvZyhgJHtOMH0lYyR7ZDB9YCwuLi5CMCwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYobTA9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke04wfSVjJHtkMH1gLC4uLkIwLCJjb2xvcjojNjI3MmE0Iik7ZWxzZSBjb25zb2xlLmxvZyhgJHtOMH0lYyR7ZDB9YCwuLi5CMCwiY29sb3I6aW5oZXJpdCIpfWNhdGNoe319LCgpPT57aWYoZCljb25zb2xlLmdyb3VwRW5kKCk7RC5jbG9zZSgpfX0sW1g/LmxvZ3NFbmRwb2ludF0pLCFYKXJldHVybiBRKEQ2LHtkZXZpY2VzOlksbG9hZGluZzpaLGVycm9yOlYsb25SZWZyZXNoOnZ9KTtsZXQgeT1ZLmZpbmQoKEQpPT5ELnVkaWQ9PT1YLmRldmljZSk/P251bGw7UigoKT0+e2RvY3VtZW50LnRpdGxlPXk/Lm5hbWU/YFNpbXVsYXRvciAtICR7eS5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW3k/Lm5hbWVdKTtsZXQgdT1sMCh5Py5uYW1lKSxwPVg2KFguZGV2dG9vbHNFbmRwb2ludD8/cjAoImRldnRvb2xzIiksTik7UigoKT0+e2lmKCFOKXJldHVybjtpZihQJiZwLnRhcmdldHMuc29tZSgoRCk9PkQuaWQ9PT1QKSlyZXR1cm47QShwLnRhcmdldHMubGVuZ3RoPT09MT9wLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtOLHAudGFyZ2V0cyxQXSksUigoKT0+e0EobnVsbCl9LFtYLmRldmljZV0pO2xldCBjPXI0KFguc3RyZWFtVXJsKSxbejAsc109VChudWxsKSx0PXowPz9jLmNvbmZpZz8/RTEodSx5Py5uYW1lKSxmPVIxKHUsdCksZzA9QzEodSx0KSxRMT1UMSh0KSxXMD1iKG51bGwpO1IoKCk9PntsZXQgRD0hMSxrPW51bGwsRT1udWxsLGg9KCk9PntpZihEfHxrKXJldHVybjtrPXNldFRpbWVvdXQoKCk9PntrPW51bGwsaSgpfSwxMDAwKX0saT0oKT0+e2xldCBkPW5ldyBXZWJTb2NrZXQoWC53c1VybCk7ZC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsRT1kLFcwLmN1cnJlbnQ9ZCxkLm9uY2xvc2U9KCk9PntpZihXMC5jdXJyZW50PT09ZClXMC5jdXJyZW50PW51bGw7aCgpfSxkLm9uZXJyb3I9KCk9PntkLmNsb3NlKCl9fTtyZXR1cm4gaSgpLCgpPT57aWYoRD0hMCxrKWNsZWFyVGltZW91dChrKTtpZihXMC5jdXJyZW50PT09RSlXMC5jdXJyZW50PW51bGw7RT8uY2xvc2UoKX19LFtYLndzVXJsXSk7bGV0IFgwPWooKEQsayk9PntsZXQgRT1XMC5jdXJyZW50O2lmKCFFfHxFLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGg9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGspKSxpPW5ldyBVaW50OEFycmF5KDEraC5sZW5ndGgpO2lbMF09RCxpLnNldChoLDEpLEUuc2VuZChpKX0sW10pLCQxPWooKEQpPT5YMCgzLEQpLFtYMF0pLF8xPWooKEQpPT5YMCg1LEQpLFtYMF0pLFUwPWooKEQpPT5YMCg0LHtidXR0b246RH0pLFtYMF0pLG0xPWooKEQpPT57cygoayk9PmsmJmsud2lkdGg9PT1ELndpZHRoJiZrLmhlaWdodD09PUQuaGVpZ2h0JiZrLm9yaWVudGF0aW9uPT09RC5vcmllbnRhdGlvbj9rOkQpfSxbXSksczA9aigoRCk9PntYMCg3LHtvcmllbnRhdGlvbjpEfSl9LFtYMF0pO1IoKCk9PntzKG51bGwpfSxbWC5zdHJlYW1VcmxdKSxSKCgpPT57bGV0IEQ9Yy5jb25maWc7aWYoIUQpcmV0dXJuO3MoKGspPT5rJiZrLndpZHRoPT09RC53aWR0aCYmay5oZWlnaHQ9PT1ELmhlaWdodCYmay5vcmllbnRhdGlvbj09PUQub3JpZW50YXRpb24/azpudWxsKX0sW2MuY29uZmlnPy53aWR0aCxjLmNvbmZpZz8uaGVpZ2h0LGMuY29uZmlnPy5vcmllbnRhdGlvbl0pO2xldCBZMD1qKChELGspPT57WDAoNix7dHlwZTpELHVzYWdlOmt9KX0sW1gwXSksW3gwLGswXT1UKG51bGwpLFtUMCxFMF09VCghMSksW0MwLFowXT1UKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKTtSKCgpPT57bGV0IEQ9KCk9PlowKHdpbmRvdy5pbm5lcldpZHRoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsRCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEQpfSxbXSksUigoKT0+e2xldCBEPW5ldyBFdmVudFNvdXJjZShYLmFwcFN0YXRlRW5kcG9pbnQ/P3IwKCJhcHBzdGF0ZSIpKSxrPW51bGw7cmV0dXJuIEQub25tZXNzYWdlPShFKT0+e3RyeXtsZXQgaD1KU09OLnBhcnNlKEUuZGF0YSk7aWYoayljbGVhclRpbWVvdXQoayk7bGV0IGk9aD8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtrPXNldFRpbWVvdXQoKCk9PmswKGgpLGkpfWNhdGNoe319LCgpPT57aWYoayljbGVhclRpbWVvdXQoayk7RC5jbG9zZSgpfX0sW1guYXBwU3RhdGVFbmRwb2ludF0pO2xldCB0MD1qKGFzeW5jKCk9PntZMCgiZG93biIsMjI3KSxhd2FpdCBuZXcgUHJvbWlzZSgoRSk9PnNldFRpbWVvdXQoRSwzMCkpLFkwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKEUpPT5zZXRUaW1lb3V0KEUsMzApKSxZMCgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoRSk9PnNldFRpbWVvdXQoRSwzMCkpLFkwKCJ1cCIsMjI3KX0sW1kwXSksTDA9YihudWxsKSxbcDAsVjFdPVQoITApLEswPWIoITApO0swLmN1cnJlbnQ9cDA7bGV0IFIwPWIobmV3IFNldCk7UigoKT0+e2xldCBEPShrKT0+e2xldCBFPSEhTDAuY3VycmVudD8uY29udGFpbnMoay50YXJnZXQpO1YxKEUpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLEQsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsRCwhMCl9LFtdKSxSKCgpPT57aWYocDApcmV0dXJuO2xldCBEPVIwLmN1cnJlbnQ7aWYoRC5zaXplPT09MClyZXR1cm47Zm9yKGxldCBrIG9mIEQpWDAoNix7dHlwZToidXAiLHVzYWdlOmt9KTtELmNsZWFyKCl9LFtwMCxYMF0pLFIoKCk9PntsZXQgRD0oaCxpKT0+e2lmKCFLMC5jdXJyZW50KXJldHVybjtpZihoLmNvZGU9PT0iS2V5SCImJmgubWV0YUtleSYmaC5zaGlmdEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLGk9PT0iZG93biImJiFoLnJlcGVhdClYMCg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKGguY29kZT09PSJLZXlBIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksaT09PSJkb3duIiYmIWgucmVwZWF0KSQwKGB4Y3J1biBzaW1jdGwgdWkgJHtYLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKEQwKT0+e2xldCBKMD1EMC5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiAkMChgeGNydW4gc2ltY3RsIHVpICR7WC5kZXZpY2V9IGFwcGVhcmFuY2UgJHtKMH1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBkPXQ0KGguY29kZSk7aWYoZD09bnVsbClyZXR1cm47aWYoaC5wcmV2ZW50RGVmYXVsdCgpLGk9PT0iZG93biIpUjAuY3VycmVudC5hZGQoZCk7ZWxzZSBSMC5jdXJyZW50LmRlbGV0ZShkKTtYMCg2LHt0eXBlOmksdXNhZ2U6ZH0pfSxrPShoKT0+RChoLCJkb3duIiksRT0oaCk9PkQoaCwidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGspLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsRSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsayksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixFKX19LFtYMCxYLmRldmljZV0pO2xldCBHMD1qKGFzeW5jKEQpPT57aWYoenx8RC51ZGlkPT09WC5kZXZpY2UpcmV0dXJuO0woITApO3RyeXtpZihELnN0YXRlIT09IkJvb3RlZCIpYXdhaXQgJDAoYHhjcnVuIHNpbWN0bCBib290ICR7RC51ZGlkfWApO2xldCBrPWF3YWl0ICQwKGBidW54IHNlcnZlLXNpbSAtLWRldGFjaCAke0QudWRpZH1gKTtpZihrLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihrLnN0ZGVycnx8IkZhaWxlZCB0byBzdGFydCBzZXJ2ZS1zaW0iKTtsZXQgRT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtFLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsRC51ZGlkKSx3aW5kb3cubG9jYXRpb24uYXNzaWduKEUudG9TdHJpbmcoKSl9Y2F0Y2h7TCghMSl9fSxbeixYLmRldmljZV0pLG49VzYoKSxmMD1MNih7ZXhlYzokMCx1ZGlkOlguZGV2aWNlLGVuYWJsZWQ6RyxvblVwbG9hZFN0YXJ0Om4uYWRkLG9uVXBsb2FkRW5kOihELGssRSk9Pm4udXBkYXRlKEQse3N0YXR1czprPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6RX0pLG9uVW5zdXBwb3J0ZWQ6KEQpPT57bGV0IGs9bi5hZGQoRC5uYW1lLCJtZWRpYSIpO24udXBkYXRlKGsse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke0QudHlwZXx8TDkoRCl9YH0pfX0pLG4wPWooYXN5bmMoRCk9PntIKChrKT0+bmV3IFNldChrKS5hZGQoRCkpO3RyeXthd2FpdCAkMChgeGNydW4gc2ltY3RsIHNodXRkb3duICR7RH1gKSxhd2FpdCB2KCl9ZmluYWxseXtIKChrKT0+e2xldCBFPW5ldyBTZXQoayk7cmV0dXJuIEUuZGVsZXRlKEQpLEV9KX19LFt2XSksdjA9aTgrMjQsaDA9Tj92MDpUMD9jOCsyNDowLHoxPWgwPjAmJkMwPj1nMCtoMCs2ND9oMDowO3JldHVybiBRKGU0LHtlbmRwb2ludDpCP1g/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlEoImRpdiIse3N0eWxlOnsuLi5fMC5wYWdlLHBhZGRpbmdSaWdodDoyNCt6MSx0cmFuc2l0aW9uOiJwYWRkaW5nLXJpZ2h0IDAuMjVzIGVhc2UifSxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6ey4uLl8wLnNpbXVsYXRvclN0YWNrLG1heFdpZHRoOmcwfSxjaGlsZHJlbjpbUShRMCx7ZXhlYzokMCxvblJvdGF0ZTpzMCxvcmllbnRhdGlvbjp0Lm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6WC5kZXZpY2UsZGV2aWNlTmFtZTp5Py5uYW1lPz9udWxsLGRldmljZVJ1bnRpbWU6eT8ucnVudGltZT8/bnVsbCxzdHJlYW1pbmc6RyxjaGlsZHJlbjpbUShRNix7ZGV2aWNlczpZLHNlbGVjdGVkVWRpZDpYLmRldmljZSxsb2FkaW5nOlosZXJyb3I6VixzdG9wcGluZ1VkaWRzOl8sb25SZWZyZXNoOnYsb25TZWxlY3Q6RzAsb25TdG9wOm4wLHRyaWdnZXI6UShRMC5UaXRsZSx7fSl9KSxRKFEwLkFjdGlvbnMse2NoaWxkcmVuOlt4MD8uaXNSZWFjdE5hdGl2ZSYmUShRMC5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCB0MCgpLGNoaWxkcmVuOlEoajgse30pfSksUShRMC5Ib21lQnV0dG9uLHtvbkNsaWNrOihEKT0+e0QucHJldmVudERlZmF1bHQoKSxVMCgiaG9tZSIpfX0pLFEodzYse292ZXJsYXlFbmFibGVkOkIsc3RyZWFtaW5nOkcsb25Ub2dnbGVPdmVybGF5OigpPT5NKChEKT0+IUQpfSksUShRMC5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pXX0pLFEoImRpdiIse3JlZjpMMCxzdHlsZTp7bWF4V2lkdGg6ZzAsbWF4SGVpZ2h0OiIxMDAlIix3aWR0aDoiMTAwJSIsYXNwZWN0UmF0aW86UTEscG9zaXRpb246InJlbGF0aXZlIn0sLi4uZjAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbUShrMSx7dXJsOlgudXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUifSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6Zixjb3JuZXJTaGFwZToic3VwZXJlbGxpcHNlKDEuMykifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6SixvblN0cmVhbVRvdWNoOiQxLG9uU3RyZWFtTXVsdGlUb3VjaDpfMSxvblN0cmVhbUJ1dHRvbjpVMCxzdWJzY3JpYmVGcmFtZTpjLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOmMuZnJhbWUsc3RyZWFtQ29uZmlnOnQsb25TY3JlZW5Db25maWdDaGFuZ2U6bTF9KSxCJiZRKE82LHt9KSxmMC5pc0RyYWdPdmVyJiZRKCJkaXYiLHtzdHlsZTp7Li4uXzAuZHJvcE92ZXJsYXksYm9yZGVyUmFkaXVzOmZ9LGNoaWxkcmVuOltRKCJzdmciLHt3aWR0aDoiMzIiLGhlaWdodDoiMzIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifSksUSgicG9seWxpbmUiLHtwb2ludHM6IjE3IDggMTIgMyA3IDgifSksUSgibGluZSIse3gxOiIxMiIseTE6IjMiLHgyOiIxMiIseTI6IjE1In0pXX0pLFEoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTMsZm9udFdlaWdodDo1MDB9LGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSldfSldfSksbi50b2FzdHMubGVuZ3RoPjAmJlEoImRpdiIse3N0eWxlOl8wLnRvYXN0U3RhY2ssY2hpbGRyZW46bi50b2FzdHMubWFwKChEKT0+USgiZGl2Iix7c3R5bGU6XzAudG9hc3QsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Li4uXzAuZG90LGJhY2tncm91bmQ6RC5zdGF0dXM9PT0idXBsb2FkaW5nIj8iI2E1YjRmYyI6RC5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MSxvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbRC5zdGF0dXM9PT0idXBsb2FkaW5nIiYmKEQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7RC5uYW1lfeKApmA6YFVwbG9hZGluZyAke0QubmFtZX3igKZgKSxELnN0YXR1cz09PSJzdWNjZXNzIiYmKEQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHtELm5hbWV9YDpgQWRkZWQgJHtELm5hbWV9IHRvIFBob3Rvc2ApLEQuc3RhdHVzPT09ImVycm9yIiYmYCR7RC5uYW1lfTogJHtELm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0sRC5pZCkpfSksUSgiZGl2Iix7c3R5bGU6ey4uLl85LnJhaWwsb3BhY2l0eTpUMHx8Tj8wOjEscG9pbnRlckV2ZW50czpUMHx8Tj8ibm9uZSI6ImF1dG8ifSxjaGlsZHJlbjpbUSgiYnV0dG9uIix7b25DbGljazooKT0+e08oITEpLEUwKChEKT0+IUQpfSxzdHlsZTpfOS5idXR0b24sImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpUMCx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOlEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE2IixyeDoiMi41In0pLFEoImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiMTUiLHkyOiIyMCJ9KV19KX0pLFEoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntFMCghMSksTygoRCk9PiFEKX0sc3R5bGU6XzkuYnV0dG9uLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOk4sdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxRKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksUSgicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSldfSksUShJNix7b3BlbjpUMCxvbkNsb3NlOigpPT5FMCghMSksdWRpZDpYLmRldmljZSxjdXJyZW50QXBwOngwLGF4T3ZlcmxheUVuYWJsZWQ6QixvblRvZ2dsZUF4T3ZlcmxheTooKT0+TSgoRCk9PiFEKX0pLFEoazYse29wZW46TixvbkNsb3NlOigpPT5PKCExKSx1ZGlkOlguZGV2aWNlLHRhcmdldHM6cC50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6UCxvblNlbGVjdFRhcmdldDpBLGxvYWRpbmc6cC5sb2FkaW5nLGVycm9yOnAuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIHAucmVmcmVzaCgpfSksUSgiZGl2Iix7c3R5bGU6XzAuYmFyLGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Li4uXzAubGl2ZSxjb2xvcjpHPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6ey4uLl8wLmRvdCxiYWNrZ3JvdW5kOkc/IiM0YWRlODAiOiIjNjY2In19KSxHPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9KV19KX0pfXZhciBfMD17cGFnZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGhlaWdodDoiMTAwdmgiLGJhY2tncm91bmQ6IiMwYTBhMGEiLHBhZGRpbmc6MjQsZ2FwOjEyLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsYm94U2l6aW5nOiJib3JkZXItYm94In0sc2ltdWxhdG9yU3RhY2s6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsd2lkdGg6IjEwMCUiLG1pbldpZHRoOjAsdHJhbnNpdGlvbjoibWF4LXdpZHRoIDAuMjVzIGVhc2UifSxiYXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjEwLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixjb2xvcjoiIzY2NiJ9LGxpdmU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjUsdHJhbnNpdGlvbjoiY29sb3IgMC4zcyJ9LGRvdDp7d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJSYWRpdXM6IjUwJSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjNzIn0sZW1wdHk6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsdGV4dEFsaWduOiJjZW50ZXIifSxlbXB0eVRpdGxlOntmb250U2l6ZToxOCxtYXJnaW46MCxjb2xvcjoiI2VlZSJ9LGVtcHR5SGludDp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0LG1heFdpZHRoOjQ4MH0sY29kZTp7YmFja2dyb3VuZDoiIzIyMiIscGFkZGluZzoiMnB4IDZweCIsYm9yZGVyUmFkaXVzOjQsZm9udFNpemU6MTN9LGRyb3BPdmVybGF5Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDo4LGJvcmRlcjoiMnB4IGRhc2hlZCAjYTViNGZjIixiYWNrZ3JvdW5kOiJyZ2JhKDk5LDEwMiwyNDEsMC4xMikiLGJhY2tkcm9wRmlsdGVyOiJibHVyKDJweCkiLGNvbG9yOiIjYTViNGZjIixwb2ludGVyRXZlbnRzOiJub25lIix6SW5kZXg6MjB9LHRvYXN0U3RhY2s6e3Bvc2l0aW9uOiJmaXhlZCIsYm90dG9tOjE2LHJpZ2h0OjE2LGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjYsbWF4V2lkdGg6MzIwLHpJbmRleDozMH0sdG9hc3Q6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjgscGFkZGluZzoiOHB4IDEycHgiLGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo4LGNvbG9yOiIjZWVlIixmb250U2l6ZToxMixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsYm94U2hhZG93OiIwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC40KSJ9fSxDNj17cG9zaXRpb246ImFic29sdXRlIix0b3A6ImNhbGMoMTAwJSArIDZweCkiLGxlZnQ6MCxtaW5XaWR0aDoyNjAsbWF4SGVpZ2h0OjM2MCxvdmVyZmxvd1k6ImF1dG8iLGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czoxMCxwYWRkaW5nOjQsYm94U2hhZG93OiIwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEzLGNvbG9yOiIjZWVlIix6SW5kZXg6MjB9LHA4PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI2cHggMTBweCIsZm9udFNpemU6MTEsY29sb3I6IiNhYWEifSxmOD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNhNWI0ZmMiLGZvbnRTaXplOjExLGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowfSx6OT17cGFkZGluZzoiNnB4IDEwcHgiLGNvbG9yOiIjZjg3MTcxIixmb250U2l6ZToxMX0sSzk9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjgscGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjE1cyJ9LFI2PXtoZWlnaHQ6MSxiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixtYXJnaW46IjRweCAwIn0sZDg9e3BhZGRpbmc6MTIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFNpemU6MTEsdGV4dEFsaWduOiJjZW50ZXIifSx1OD17cGFkZGluZzoiNnB4IDEwcHggMnB4Iixmb250U2l6ZToxMCxmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQpIix0ZXh0VHJhbnNmb3JtOiJ1cHBlcmNhc2UiLGxldHRlclNwYWNpbmc6IjAuMDhlbSJ9LGM4PTMyMCxpOD03NjAsbT17cGFuZWw6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjEyLHJpZ2h0OjEyLGJvdHRvbToxMix3aWR0aDpgbWluKCR7aTh9cHgsIGNhbGMoMTAwdncgLSAzMnB4KSlgLG1pbldpZHRoOjAsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjkyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjE0LGNvbG9yOiIjZWVlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSIsYm94U2hhZG93OiIwIDEycHggNDBweCByZ2JhKDAsMCwwLDAuNTUpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsekluZGV4OjM1fSxoZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCA2cHggMTJweCIsZmxleFNocmluazowfSx0aXRsZUdyb3VwOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJiYXNlbGluZSIsZ2FwOjgsbWluV2lkdGg6MH0sdGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIix3aGl0ZVNwYWNlOiJub3dyYXAifSxzdWJ0aXRsZTp7Zm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC4zOCkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxoZWFkZXJBY3Rpb25zOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH0saWNvbkJ1dHRvbjp7d2lkdGg6MjYsaGVpZ2h0OjI2LGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42OCkiLGJvcmRlclJhZGl1czo1LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowfSx0YXJnZXRCYXI6e21pbkhlaWdodDozNixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlckJvdHRvbToiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGZsZXhTaHJpbms6MH0sc2VsZWN0Ont3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixvdXRsaW5lOiJub25lIn0scGlja2VyV3JhcDp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDoiMTAwJSIsbWluV2lkdGg6MH0scGlja2VyQnV0dG9uOnt3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjgsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixjdXJzb3I6InBvaW50ZXIiLHRleHRBbGlnbjoibGVmdCJ9LHBpY2tlckxhYmVsOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAiLG1pbldpZHRoOjB9LHBpY2tlckxpc3Q6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiJjYWxjKDEwMCUgKyA0cHgpIixsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzo0LGxpc3RTdHlsZToibm9uZSIsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjgsYm94U2hhZG93OiIwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41KSIsbWluV2lkdGg6MjIwLG1heFdpZHRoOjM2MCxtYXhIZWlnaHQ6MzIwLG92ZXJmbG93WToiYXV0byIsekluZGV4OjUwfSxwaWNrZXJJdGVtOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBhZGRpbmc6IjNweCA4cHgiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44NSkiLGZvbnRTaXplOjEyLGxpbmVIZWlnaHQ6MS4zNX0scGlja2VySXRlbVNlbGVjdGVkOntiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIn0scGlja2VySXRlbUhvdmVyZWQ6e2JhY2tncm91bmQ6InJnYmEoMTAsMTMyLDI1NSwwLjIyKSJ9LHBpY2tlckl0ZW1EaXNhYmxlZDp7b3BhY2l0eTowLjQsY3Vyc29yOiJub3QtYWxsb3dlZCIsZm9udFN0eWxlOiJpdGFsaWMifSxwaWNrZXJHcm91cDp7bGlzdFN0eWxlOiJub25lIixtYXJnaW46MCxwYWRkaW5nOjB9LHBpY2tlckdyb3VwSGVhZGVyOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4LHBhZGRpbmc6IjRweCA2cHggMnB4Iixmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSJ9LHBpY2tlckdyb3VwSWNvbkltZzp7d2lkdGg6MTYsaGVpZ2h0OjE2LGJvcmRlclJhZGl1czozLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIn0scGlja2VyR3JvdXBOYW1lOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJHcm91cExpc3Q6e2xpc3RTdHlsZToibm9uZSIsbWFyZ2luOjAscGFkZGluZzowLHBhZGRpbmdMZWZ0OjI2fSxwaWNrZXJJdGVtVGl0bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJJdGVtVXJsOntkaXNwbGF5OiJibG9jayIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDIpIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxlbXB0eVRhcmdldDp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40OCkiLGZvbnRTaXplOjEyLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGZyYW1lV3JhcDp7ZmxleDoxLG1pbkhlaWdodDowLGJhY2tncm91bmQ6IiNmZmYiLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LGlmcmFtZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixkaXNwbGF5OiJibG9jayIsYmFja2dyb3VuZDoiI2ZmZiJ9LG1lc3NhZ2U6e2hlaWdodDoiMTAwJSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjI0LGJhY2tncm91bmQ6IiMxMTExMTMiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTgpIix0ZXh0QWxpZ246ImNlbnRlciIsZm9udFNpemU6MTN9fSxfOT17cmFpbDp7cG9zaXRpb246ImZpeGVkIix0b3A6MTIscmlnaHQ6MTIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOjQsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6MTAsYmFja2Ryb3BGaWx0ZXI6ImJsdXIoMTJweCkiLFdlYmtpdEJhY2tkcm9wRmlsdGVyOiJibHVyKDEycHgpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMThzIGVhc2UiLHpJbmRleDo0MH0sYnV0dG9uOnt3aWR0aDozMCxoZWlnaHQ6MzAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6Nixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixjdXJzb3I6InBvaW50ZXIiLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZSJ9fSxTPXt0b2dnbGU6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjE2LHJpZ2h0OjE2LHdpZHRoOjMwLGhlaWdodDozMCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo2LGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGN1cnNvcjoicG9pbnRlciIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlIix6SW5kZXg6NDB9LHBhbmVsOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxMixyaWdodDoxMixib3R0b206MTIsd2lkdGg6YzgsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjkyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjE0LGNvbG9yOiIjZWVlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSIsYm94U2hhZG93OiIwIDEycHggNDBweCByZ2JhKDAsMCwwLDAuNTUpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsekluZGV4OjM1fSxoZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjZweCAxMHB4IDZweCAxMnB4In0saGVhZGVyVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIn0sY2xvc2VCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjYWFhIixjdXJzb3I6InBvaW50ZXIiLHBhZGRpbmc6NCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJvcmRlclJhZGl1czo0fSxib2R5OntwYWRkaW5nOjE0LG92ZXJmbG93WToiYXV0byIsZmxleDoxLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjEyfSxzZWN0aW9uVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wOGVtIixtYXJnaW46IjAgMCAxMHB4In0sc2VjdGlvbjp7YmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6MTJ9LGVtcHR5OntiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzoxNixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250U2l6ZToxMix0ZXh0QWxpZ246ImNlbnRlciJ9LGFwcEhlYWRlcjp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsbWFyZ2luQm90dG9tOjEwfSxhcHBJY29uOnt3aWR0aDo0NCxoZWlnaHQ6NDQsYm9yZGVyUmFkaXVzOjEwLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIn0sYXBwTmFtZTp7Zm9udFNpemU6MTQsZm9udFdlaWdodDo2MDAsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sYXBwQnVuZGxlOntmb250U2l6ZToxMSxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sc3Bpbm5lcjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFdlaWdodDo0MDB9LGVycm9yOntiYWNrZ3JvdW5kOiJyZ2JhKDI0OCwxMTMsMTEzLDAuMDgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI0OCwxMTMsMTEzLDAuMikiLGNvbG9yOiIjZmNhNWE1Iixmb250U2l6ZToxMSxwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6NixtYXJnaW5Cb3R0b206MTB9LGRsOnttYXJnaW46MCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo2fSxyb3c6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImJhc2VsaW5lIixnYXA6OCxtaW5XaWR0aDowfSxkdDp7bWFyZ2luOjAsZm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsd2lkdGg6ODQsZmxleFNocmluazowfSxkZDp7bWFyZ2luOjAsZm9udFNpemU6MTIsY29sb3I6IiNlZWUiLGZsZXg6MSxtaW5XaWR0aDowLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LHJvd0FjdGlvbldyYXA6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAscmlnaHQ6MCxib3R0b206MCxwYWRkaW5nTGVmdDoyOCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI4LDI4LDMwLDApIDAlLCAjMWMxYzFlIDU1JSkiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UifSxwZXJtc1RvZ2dsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjYsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIscGFkZGluZzowLG1hcmdpbjowLGN1cnNvcjoicG9pbnRlciIsd2lkdGg6IjEwMCUiLHRleHRBbGlnbjoibGVmdCIsbGluZUhlaWdodDoxfSxwZXJtc1Njcm9sbFdyYXA6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbWFyZ2luVG9wOjh9LHBlcm1zU2Nyb2xsOnttYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOiI4cHggMCIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxwZXJtc0ZhZGVUb3A6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHJpZ2h0OjAsaGVpZ2h0OjE0LHBvaW50ZXJFdmVudHM6Im5vbmUiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxYzFjMWUgMCUsIHJnYmEoMjgsMjgsMzAsMCkgMTAwJSkiLGJvcmRlclRvcExlZnRSYWRpdXM6MTAsYm9yZGVyVG9wUmlnaHRSYWRpdXM6MTB9LHBlcm1zRmFkZUJvdHRvbTp7cG9zaXRpb246ImFic29sdXRlIixib3R0b206MCxsZWZ0OjAscmlnaHQ6MCxoZWlnaHQ6MTQscG9pbnRlckV2ZW50czoibm9uZSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzFjMWMxZSAwJSwgcmdiYSgyOCwyOCwzMCwwKSAxMDAlKSJ9LHBlcm1zRm9vdGVyOntkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLHBhZGRpbmdUb3A6OH0scmVzZXRBbGxCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggOHB4Iixib3JkZXJSYWRpdXM6NSxjdXJzb3I6InBvaW50ZXIiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wNGVtIn0scGVybXNMaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo0fSxwZXJtUm93OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxwYWRkaW5nOiI0cHggMnB4In0scGVybUxhYmVsOntmb250U2l6ZToxMixjb2xvcjoiI2VlZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixmbGV4OjEsbWluV2lkdGg6MH0scGVybVNlZzp7ZGlzcGxheToiZmxleCIsZ2FwOjIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA0KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoyfSxwZXJtQnRuOnt3aWR0aDoyNCxoZWlnaHQ6MjIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xMnMsIGNvbG9yIDAuMTJzIn0scm93QWN0aW9uOnt3aWR0aDoyMCxoZWlnaHQ6MjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6NCxjb2xvcjoiI2ZmZiIsY3Vyc29yOiJwb2ludGVyIixwYWRkaW5nOjB9fSxWMD17dGFyZ2V0czp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLG92ZXJmbG93OiJoaWRkZW4iLHBvaW50ZXJFdmVudHM6Im5vbmUiLHpJbmRleDoxMH0sdGFyZ2V0Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGJveFNpemluZzoiYm9yZGVyLWJveCIsbWluV2lkdGg6MSxtaW5IZWlnaHQ6MSxwYWRkaW5nOjAsYm9yZGVyOiIxcHggc29saWQgIzM0ZDM5OSIsYm9yZGVyUmFkaXVzOjMsY3Vyc29yOiJwb2ludGVyIixwb2ludGVyRXZlbnRzOiJhdXRvIn0scGFuZWxIZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDo4fSxvdmVybGF5VG9nZ2xlOntib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6NSxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43KSIsY3Vyc29yOiJwb2ludGVyIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggN3B4In0sZW1wdHlMaW5rOntjb2xvcjoiI2E1YjRmYyIsdGV4dERlY29yYXRpb246Im5vbmUifSx0b29sYmFyQnV0dG9uQWN0aXZlOntiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9LHRvb2xiYXJCdXR0b25BY3RpdmVIb3Zlcjp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGxpc3Q6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjQsbWFyZ2luVG9wOjgscGFkZGluZzoiOHB4IDAiLG1heEhlaWdodDoyNjAsb3ZlcmZsb3dZOiJhdXRvIixzY3JvbGxiYXJXaWR0aDoidGhpbiJ9LGxpc3RJdGVtOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMnB4IixtaW5XaWR0aDowfSxsaXN0SXRlbUFjdGl2ZTp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA2KSJ9LGl0ZW1UZXh0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDoyLGZsZXg6MSxtaW5XaWR0aDowfSxpdGVtTGFiZWw6e292ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCIsY29sb3I6IiNlZWUiLGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NTAwfSxpdGVtTWV0YTp7b3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwfSxpdGVtU2l6ZTp7ZmxleFNocmluazowLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czo2LGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsZm9udFNpemU6MTAscGFkZGluZzoiM3B4IDZweCJ9fTtROChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoUShFNix7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return Be}function Vi(_){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=di(s)??_?.device??null,o=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if(A===o||A.startsWith(`${o}/`)){(async()=>{let y=A===o?"inspector.html":A.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/@${Ei}/${y}${C===-1?"":s.slice(C)}`),F={"Cache-Control":"public, max-age=604800"},O=n.headers.get("content-type");if(O)F["Content-Type"]=O;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(A===e||A===e+"/"){let y=a_(),n=C_(y,r),F=Ni();if(n){let v=`<script>window.__SIM_PREVIEW__=${JSON.stringify({...n,basePath:e,logsEndpoint:L_(e,"/logs",n.device),appStateEndpoint:L_(e,"/appstate",n.device),axEndpoint:L_(e,"/ax",n.device),devtoolsEndpoint:L_(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(A===e+"/devtools"){(async()=>{let y=a_(),n=C_(y,r);if(!n){S.writeHead(404,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"No serve-sim device"}));return}try{let F=await ce(),O=await F.listTargets(),v=hi(t.headers?.host,F.port),u=O.filter((p)=>!p.udid||p.udid===n.device).map((p)=>({...p,webSocketDebuggerUrl:`ws://${v}/devtools/page/${encodeURIComponent(p.id)}`,devtoolsFrontendUrl:Hi(o,v,p.id)}));S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({port:F.port,targets:u}))}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(A===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 ce()).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(A===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 O=await ce();if(!O.highlightTarget){S.writeHead(501,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await O.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(A===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(A===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(`:
|
|
5
40
|
|
|
6
|
-
`);let
|
|
41
|
+
`);let O=pi.get(n.device).addClient(S);t.on("close",O);return}if((A===e+"/exec"||A===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}fi(n,{maxBuffer:16777216},(F,O,v)=>{S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:O.toString(),stderr:v.toString(),exitCode:F?F.code??1:0}))})});return}if(A===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(`:
|
|
7
42
|
|
|
8
|
-
`);let
|
|
9
|
-
`))!==-1){let
|
|
43
|
+
`);let O=pt("xcrun",["simctl","spawn",F,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),v="";O.stdout.on("data",(b)=>{v+=b.toString();let u;while((u=v.indexOf(`
|
|
44
|
+
`))!==-1){let p=v.slice(0,u).trim();if(v=v.slice(u+1),p)S.write("data: "+p+`
|
|
10
45
|
|
|
11
|
-
`)}}),
|
|
46
|
+
`)}}),O.on("close",()=>S.end()),t.on("close",()=>O.kill());return}if(A===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(`:
|
|
12
47
|
|
|
13
|
-
`);let
|
|
14
|
-
`))!==-1){let
|
|
48
|
+
`);let O=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/,b="",u="";O.stdout.on("data",(p)=>{u+=p.toString();let E;while((E=u.indexOf(`
|
|
49
|
+
`))!==-1){let f=u.slice(0,E).trim();if(u=u.slice(E+1),!f)continue;let B;try{B=JSON.parse(f).eventMessage??""}catch{continue}let T=v.exec(B);if(!T)continue;let a=T[1],$=parseInt(T[2],10);if(!li(a))continue;if(a===b)continue;b=a,bi(F,a).then((c)=>{S.write("data: "+JSON.stringify({bundleId:a,pid:$,isReactNative:c})+`
|
|
15
50
|
|
|
16
|
-
`)})}}),
|
|
17
|
-
Checked: ${
|
|
18
|
-
`).map((
|
|
19
|
-
${A}`:"Helper process failed to start";console.error(
|
|
20
|
-
==> ${
|
|
21
|
-
==> ${
|
|
22
|
-
Shutting down...`);for(let[
|
|
23
|
-
option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let
|
|
51
|
+
`)})}}),O.on("close",()=>S.end()),t.on("close",()=>O.kill());return}if(i)i()}}var ut,Ei="854a02be78c7ffea104cb523636efa991bef5c5b",V_=9222,pi,i_=null,ui,vi,Oi,m_,Be=null;var lt=z_(()=>{qe();ut=fe(Di(),"serve-sim"),pi=Ue(),ui=new Set(["host.exp.Exponent","dev.expo.Exponent"]),vi=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],Oi=/(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;m_={at:0,booted:null}});import{execSync as j,spawn as dt}from"child_process";import{chmodSync as mi,existsSync as u_,mkdirSync as gt,openSync as Ht,closeSync as ht,readFileSync as M_,unlinkSync as P_,writeFileSync as Nt}from"fs";import{createHash as Li}from"crypto";import{homedir as Wi,networkInterfaces as Gi}from"os";import{join as Mi,resolve as Fe}from"path";import{tmpdir as rS}from"os";import{join as l_}from"path";import{readdirSync as $S}from"fs";var Y=l_(rS(),"serve-sim"),nC=l_(Y,"server.json");function b_(_){return l_(Y,`server-${_}.json`)}function w_(){try{return $S(Y).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>l_(Y,_))}catch{return[]}}import{fileURLToPath as AS}from"url";import{dirname as oS}from"path";import{createServer as nS}from"http";import{createServer as yS}from"net";function We(_){return oS(AS(_))}function d_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function Ge(_){return new Promise((e)=>{let t=yS();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_)})}async function Me(_){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-h7yxhn2g.";var Pi=We(import.meta.url);function ue(){if(!u_(Y))gt(Y,{recursive:!0})}function J(_){if(_)return De(b_(_));for(let e of w_()){let t=De(e);if(t)return t}return null}var W_={at:0,booted:null};function Ui(){let _=Date.now();if(W_.booted&&_-W_.at<1000)return W_.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 W_={at:_,booted:S},S}catch{return null}}function De(_){try{if(!u_(_))return null;let e=JSON.parse(M_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return P_(_),null}let t=Ui();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{P_(_)}catch{}return null}return e}catch{return null}}function U_(){let _=[];for(let e of w_()){let t=De(e);if(t)_.push(t)}return _}function bt(_){ue(),Nt(b_(_.device),JSON.stringify(_,null,2))}function v_(_){if(_)try{P_(b_(_))}catch{}else for(let e of w_())try{P_(e)}catch{}}function qi(){let _=n_.startsWith("/$bunfs/");if(!_&&u_(n_))return n_;if(!_){let s=Fe(Pi,"../bin/serve-sim-bin");if(u_(s))return s;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
|
|
52
|
+
Checked: ${n_}, ${s}`)}let e=M_(n_),t=Li("sha256").update(e).digest("hex").slice(0,16),S=Fe(Wi(),"Library/Caches/serve-sim");gt(S,{recursive:!0});let i=Fe(S,`serve-sim-bin-${t}`);if(!u_(i)){Nt(i,e),mi(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 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.name}catch{}return null}function q_(_){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 Te(_){try{return process.kill(_,0),!0}catch{return!1}}function Ee(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),d_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let t=Date.now()+500;while(Date.now()<t)try{process.kill(_,0),d_(25)}catch{return}}function Ii(_){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 Xi(_){let e=Ii(_);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{}d_(100)}function ki(_){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 Ki(){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 Gt(_){let e=new Set(U_().map((t)=>t.port));for(let t=_;t<_+100;t++){if(e.has(t))continue;if(await Ge(t))return t}throw Error(`No available port found in range ${_}-${_+99}`)}async function xi(_){ki(_);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((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(M_(t,"utf-8").includes("Capture started"))break}catch{}}}let s="";try{s=M_(t,"utf-8").trim()}catch{}return{ready:i,log:s}}async function zi(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ue();let A=Ht(s,"w"),r=dt(e,[t,"--port",String(S)],{detached:!0,stdio:["ignore",A,A],env:Vt()});r.unref(),ht(A);let o=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:n,log:F}=await Mt(o,C,s,()=>!y&&Te(o));return{ready:n,pid:o,exited:y||!Te(o),log:F}}async function ji(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ue();let A=Ht(s,"w"),r=dt(e,[t,"--port",String(S)],{detached:!1,stdio:["ignore",A,A],env:Vt()});ht(A);let o=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:n,log:F}=await Mt(o,C,s,()=>!y&&Te(o));return{ready:n,child:r,log:F}}async function Pt(_,e,t){await xi(_);let S="127.0.0.1",i=qi(),s=Mi(Y,`server-${_}.log`),C={helperPath:i,udid:_,port:e,host:S,logFile:s},A="",r=2;for(let y=1;y<=r;y++){if(Xi(e),t.detach){let n=await zi(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 bt(F),{pid:n.pid}}Ee(n.pid),A=n.log}else{let n=await ji(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 bt(F),{pid:n.child.pid,child:n.child}}Ee(n.child.pid),A=n.log}if(y<r)await new Promise((n)=>setTimeout(n,500))}let o=A?`Helper failed:
|
|
54
|
+
${A}`:"Helper process failed to start";console.error(o),process.exit(1)}async function Qi(_,e,t){let S=_.length>0?_.map(q_):(()=>{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=J(o);if(y){if(!t){let b=wt(o)??o;if(S.length>1)console.log(`
|
|
55
|
+
==> ${b} (${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 Gt(C);let{pid:n,child:F}=await Pt(o,C,{detach:!1});if(F)i.set(o,F);let O="127.0.0.1",v={pid:n,port:C,device:o,url:`http://${O}:${C}`,streamUrl:`http://${O}:${C}/stream.mjpeg`,wsUrl:`ws://${O}:${C}/ws`};if(s.push(v),!t){let b=wt(o)??o;if(S.length>1)console.log(`
|
|
56
|
+
==> ${b} (${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 A=!1,r=(o)=>{if(A)return;if(A=!0,!t)console.log(`
|
|
57
|
+
Shutting down...`);for(let[y,n]of i){let F=n.pid;if(F)Ee(F);v_(y)}i.clear(),process.exit(o)};for(let[o,y]of i)y.on("exit",(n)=>{if(A)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 pe(_,e){let t=_.length>0?_.map(q_):(()=>{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=J(s);if(C){S.push(C);continue}i=await Gt(i),await Pt(s,i,{detach:!0});let A="127.0.0.1";S.push({pid:J(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 Ji(_){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 Zi(_){if(_){let t=q_(_),S=J(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=U_();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 Yi(_){if(_){let e=q_(_),t=J(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=U_();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 _C(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=J(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 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),A(Error("WebSocket connection failed"))}})}async function eC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=J(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 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),A(Error("WebSocket connection failed"))}})}async function tC(_){let e,t=[];for(let s=0;s<_.length;s++)if(_[s]==="--device"||_[s]==="-d")e=_[++s];else t.push(_[s]);let S=J(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})),o=new Uint8Array(1+r.length);o[0]=4,o.set(r,1),A.send(o),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 SC(_){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"},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]
|
|
58
|
+
option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let r=J(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:A,enabled:s})),O=new Uint8Array(1+F.length);O[0]=8,O.set(F,1),n.send(O),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 sC(_){let e;for(let S=0;S<_.length;S++)if(_[S]==="--device"||_[S]==="-d")e=_[++S];let t=J(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 iC(_,e,t){let S;if(e.length>0)S=(await pe(e,3100))[0]?.device;else{let n=U_();if(n.length>0)S=n[0]?.device;else console.log("Starting simulator stream..."),S=(await pe(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (lt(),Ot)),s=i({basePath:"/",device:S}),C=t?1:50,A=_,r,o=!1;for(let n=0;n<C;n++){let F=_+n;try{await CC(F,s),A=F,o=!0;break}catch(O){if(r=O,O?.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=Ki();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 CC(_,e){return Me({port:_,middleware:e})}function Ut(){console.log(`
|
|
24
59
|
serve-sim - Stream iOS Simulator to the browser
|
|
25
60
|
|
|
26
61
|
Usage:
|
|
@@ -53,4 +88,4 @@ Examples:
|
|
|
53
88
|
serve-sim --detach Start streaming in background (daemon)
|
|
54
89
|
serve-sim --list Show all running streams
|
|
55
90
|
serve-sim --kill Stop all streams
|
|
56
|
-
`)}var
|
|
91
|
+
`)}var q=process.argv.slice(2);if(q[0]==="gesture")await _C(q.slice(1)),process.exit(0);if(q[0]==="button")await tC(q.slice(1)),process.exit(0);if(q[0]==="rotate")await eC(q.slice(1)),process.exit(0);if(q[0]==="ca-debug")await SC(q.slice(1)),process.exit(0);if(q[0]==="memory-warning")await sC(q.slice(1)),process.exit(0);var p_,qt=!1,It=!1,Xt=!1,kt=!1,Kt=!1,xt=!1,G_=[],zt,jt;for(let _=0;_<q.length;_++){let e=q[_];switch(e){case"--port":case"-p":p_=parseInt(q[++_]??"3100",10);break;case"--detach":case"-d":qt=!0;break;case"--quiet":case"-q":It=!0;break;case"--no-preview":xt=!0;break;case"--list":case"-l":if(Xt=!0,q[_+1]&&!q[_+1].startsWith("-"))zt=q[++_];break;case"--kill":case"-k":if(kt=!0,q[_+1]&&!q[_+1].startsWith("-"))jt=q[++_];break;case"--help":case"-h":case"help":Kt=!0;break;default:if(!e.startsWith("-"))G_.push(e);else console.error(`Unknown flag: ${e}`),Ut(),process.exit(1)}}if(Kt)Ut(),process.exit(0);if(Xt)Zi(zt),process.exit(0);if(kt)Yi(jt),process.exit(0);if(qt){let _=await pe(G_,p_??3100);Ji(_)}else if(xt)await Qi(G_,p_??3100,It);else await iC(p_??3200,G_,p_!==void 0);
|